2019 训练计划——DFS+BFS+string专题( 每天10题 ) 训练计划③
发布日期:2021-06-29 14:25:28 浏览次数:3 分类:技术文章

本文共 4770 字,大约阅读时间需要 15 分钟。

A


题目大意

模拟 我们平常写代码的++x 和- -x 或者x++ x- -


题解

容易发现,每个字符串的区别就在于第2位,要么 + ,要么 - 只需要判断一下就好了

#include
using namespace std;int n;int main(){
ios::sync_with_stdio(false); cin.tie(0); while(cin>>n){
int ans=0; string s; for(int i=0;i
>s; if(s[1]=='+') ++ans; if(s[1]=='-') --ans; } cout<
<

B


题目大意

字符串长度超过10个的,中间部分用中间部分长度代替


题解

对于输入的字符串,进行判断,长度大于10,那么就处理一下,中间长度等于总长度-2 最后将数字转化为字符串 (用stringstream就可以了)

#include
using namespace std;int main(){
ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; string s; string res; for(int i=0;i
>s; res=""; int len=s.length(); if(len>10){
len-=2; res+=s[0]; stringstream ss; ss<
>s2; res+=s2; res+=s[len+1]; cout<
<

C


题目大意

在一个数组中找到比给定值大的个数 不包括0


题解

水题,一层for循环解决

#include
using namespace std;const int maxn=100+5;int a[maxn];int n,m;int main(){
ios::sync_with_stdio(false); cin.tie(0); while(cin>>n>>m){
for(int i=1;i<=n;i++) cin>>a[i]; int res=0; for(int i=1;i<=n;i++){
if(a[i]>=a[m]&&a[i]) ++res; } cout<
<

D


题目大意

将所有字母变为小写字母后,然后删除掉相应特殊字符,最后输出时在每个字母前加.


题解

题目意思很容易看懂,但有一个新知识:transform(s.begin(),s.end(),s.begin(),::tolower); 函数是用来将所有字母变为小写字母 把tolower变为toupper就是变成大写字母了

#include
using namespace std;int main(){
string s; cin>>s; transform(s.begin(),s.end(),s.begin(),::tolower); int n=s.length(); for(int i=0;i

E


题目大意

比较两段字符串,大小写没限制,小于输出-1 等于输出0 大于输出1


题解

正好又用到了上题的函数,由于C++里面字符串可以按照字典序进行排序,然后题目要求大小写没限制,我们可以把它们全部变为小写字母或者大写字母都可以 然后我们直接进行比较就可以得出答案

#include
using namespace std;int main(){
string s1,s2; cin>>s1>>s2; transform(s1.begin(),s1.end(),s1.begin(),::tolower); transform(s2.begin(),s2.end(),s2.begin(),::tolower); if(s1

F


题目大意

给你两支队伍,然后用一段字符串表示队伍的位置,两支队伍分别用0和1来表示 让你判断是否出现连续0或1 达到长度超过7 如果超过了就输出YES 否则输出NO


题解

直接遍历一遍字符串 用两个变量存0和1出现次数 只要一个出现次数超过了7次 直接输出YES 否则输出NO

#include
using namespace std;int main(){
ios::sync_with_stdio(false); cin.tie(0); string s; cin>>s; int flag=1; int n=s.length(); int ans0=0,ans1=0; for(int i=0;i
=7){
flag=0; break; } if(s[i]=='1'){
ans0=0; ans1++; } if(ans1>=7){
flag=0; break; } } if(!flag) cout<<"YES"<

G


题目大意

就是求小组个数,不存在雇佣关系,所需最小的组数其实就是树的最大深度,一棵树有多少层那就必须有多少个小组


题解

可以把他们的关系看成一棵树,去寻找树的最大深度,就可以用DSF来找,直接采用并查集方式找根节点

#include
using namespace std;const int maxn=2000+10;int p,pre[maxn];int cnt;int dfs(int x){
if(x==pre[x]) return x; else{
cnt++; return dfs(pre[x]); }}int main(){
ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) pre[i]=i; for(int i=1;i<=n;i++){
cin>>p; if(p!=-1) pre[i]=p; } int ans=-1; for(int i=1;i<=n;i++){
cnt=1; dfs(i); ans=max(ans,cnt); } cout<
<

H


题目大意

求需要几个步骤使得字符串中相邻的字符不相同


题解

水题,遍历一遍即可

#include
using namespace std;const int maxn=100+10;char s[maxn];int n;int main(){
ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=0;i
>s[i]; int ans=0; char ch; for(int i=0;i

I


题目大意

将字符串第一个字符大写


题解

小写变为大写+32即可

#include
using namespace std;int main(){
string s; cin>>s; if(s[0]>='a'&&s[0]<='z') s[0]-=32; cout<
<

J


题目大意

给出一个迷宫,’.’ 表示通路,‘#’ 表示城墙,输入的数据中,‘.’构成的已经联通,要求将k个’.‘转换成’#’,使得剩下的’.'仍然是联通的


题解

深搜,假设共有s个’.‘那么搜索得到的s-k个点必然是联通的,那么只要将剩下的’.‘转换成’#'就行了。

#include
using namespace std;int n,m,s;const int maxn=500+10;char mp[maxn][maxn];int dx[]={
1,0,-1,0};int dy[]={
0,1,0,-1};bool vis[maxn][maxn];bool check(int x,int y){
if(x>=1&&x<=n&&y>=1&&y<=m&&!vis[x][y]&&mp[x][y]=='.') return true; return false;}void dfs(int x,int y){
vis[x][y]=1; for(int i=0;i<4;i++){
int xx=x+dx[i]; int yy=y+dy[i]; if(check(xx,yy)){
dfs(xx,yy); } } if(s){
s--; mp[x][y]='X'; }}int main(){
ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>s; int px,py; for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>mp[i][j]; if(mp[i][j]=='.'){
px=i,py=j; } } } dfs(px,py); for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<
学如逆水行舟,不进则退

转载地址:https://chocolate.blog.csdn.net/article/details/100661917 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2019 训练计划——DFS+BFS+string专题( 每天10题 ) 训练计划④
下一篇:The 2019 Asia Nanchang First Round Online Programming Contest ( B. Fire-Fighting Hero 两次Dijkstra)

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年05月01日 23时15分36秒