#include <bits/stdc++.h> using namespace std; /*【A. A Blend of Springtime】 一排连续的细胞,其中每一个细胞都含有琥珀色或淡黄色或金丝雀黄色的花,或者无色。 花枯萎时,它会从原属细胞中消失,并且在两个相邻的细胞中(或者在花园外)散布其颜色的花瓣。 如果花瓣落在特定细胞之外,它们就会变得{不可见}。请注意,花可以以任意顺序枯萎。 确定是否有可能在某些(可能没有或全部)花朵脱落花瓣之后,至少其中一个细胞{含有所有三种颜色}。 如果可能所有三种颜色出现在某个单元格中,则输出“Yes”,否则输出“No”。 */ //【分析】三种不同颜色的花相连即可。即判断s[i],s[i-1],s[i+1]不相等且都等于‘.’。 int main(){ string s; cin>>s; int flag=0; for(int i=1;i<s.size()-1;i++) if(s[i]!='.') if(s[i-1]!=s[i]&&s[i+1]!=s[i]&&s[i+1]!=s[i-1] &&s[i+1]!='.'&&s[i-1]!='.') { flag=1; break; } if(flag)cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; }
#include <bits/stdc++.h> using namespace std; /*【B. A Tide of Riverscape】 字符'0','1'和'.'的字符串,其中'0'表示低潮,'1'表示高潮,'.'表示未知(高或低)。 在确定每个'.'是0或1后是否有可能让给定的整数p不是结果字符串的周期。 如果p可能不是结果字符串的一个周期,则输出任何一个这样的字符串;否则输出“No”。 */ //【分析】遍历字符串,每一次判断和相隔p的字符是否相等。 //如果不相等判断是否有一个为‘.’,将‘.’改成与前p位字符相反的‘0’或‘1’。 char s[10050]; int main(){ int n,p; cin>>n>>p; scanf("%s",s); bool flag=false; for(int i=0;i<n-p;i++){ //周期只用判断到n-p if((s[i]=='0'||s[i]=='1')&&s[i+p]=='.'){ if(s[i]=='1') s[i+p]='0'; else s[i+p]='1'; flag=true; break; //一定满足 } else if((s[i+p]=='0'||s[i+p]=='1')&&s[i]=='.'){ if(s[i+p]=='1') s[i]='0'; else s[i]='1'; flag=true; break; //反向填入,也一定满足 } else if(s[i]=='.'&&s[i+p]=='.'){ flag=true; s[i]='1'; s[i+p]='0'; break; } else if(s[i]!=s[i+p]){ flag=true; break; } } if(!flag) cout<<"No"<<endl; else{ for(int i=0;i<n;i++) if(s[i]=='.') s[i]='1'; //随便填满 cout<<s<<endl; } return 0; }
#include <bits/stdc++.h> using namespace std; /*【C. A Mist of Florescence】 构造一个n*m的图,使得’A’,’B’,’C’,’D’的联通块个数分别为a,b,c,d。 n,m<=50,1<=a,b,c,d<=100 */ /* 分析》m可直接取到最大,因为多余的块可以有同一种字符填补,不会影响结果。 可以用B来帮助A构造,用1个B的联通块就可以帮助A构造。 BBBBBBBBBBBBBBBBBBBBBBBBBBBB ABABABABABABABABABABABABABAB BBBBBBBBBBBBBBBBBBBBBBBBBBBB 类似上图完成A的构造,之后用C帮助B,D帮助C;而D帮助C时,注意让C留出一块来帮助D。 DDDDDDDDDDDDDDDDDDDDDDDDDD CDCDCDCDCDCDCDCDCDCDCDCDCD CDDDDDDDDDDDDDDDDDDDDDDDDD CCCCCCCCCCCCCCCCCCCCCCCCCC DCDCDCDCDCDCDCDCDCDCDCDCDC CCCCCCCCCCCCCCCCCCCCCCCCCC 这样就能保证C联通块个数不变的情况下帮助D构造成功。*/ char pic[55][55]; int main(){ int a,b,c,d; cin>>a>>b>>c>>d; int pos=0;//记录当前行 while(a){ if(a>=25){ for(int i=0;i<50;i+=2) pic[pos][i]='A'; for(int i=1;i<50;i+=2) pic[pos][i]='B'; a-=25; pos++; for(int i=0;i<50;i++) pic[pos][i]='B'; pos++; } else{ for(int i=0;i<50;i++) pic[pos][i]='B'; for(int i=0;i<a*2;i+=2) pic[pos][i]='A'; pos++; for(int i=0;i<50;i++) pic[pos][i]='B'; pos++; break; } } for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; b--; while(b){ if(b>25){ for(int i=0;i<50;i+=2) pic[pos][i]='B'; for(int i=1;i<50;i+=2) pic[pos][i]='C'; b-=25; pos++; for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; } else{ for(int i=0;i<50;i++) pic[pos][i]='C'; for(int i=0;i<b*2;i+=2) pic[pos][i]='B'; pos++; for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; break; } } c--; for(int i=0;i<50;i++) pic[pos][i]='D'; if(c==0) pic[pos][0]='C'; pos++; while(c){ if(c>25){ for(int i=0;i<50;i+=2) pic[pos][i]='C'; for(int i=1;i<50;i+=2) pic[pos][i]='D'; c-=25; pos++; for(int i=0;i<50;i++) pic[pos][i]='D'; pos++; } else{ for(int i=0;i<50;i++) pic[pos][i]='D'; for(int i=0;i<c*2;i+=2) pic[pos][i]='C'; pos++; pic[pos][0]='C'; for(int i=1;i<50;i++) pic[pos][i]='D'; pos++; break; } } for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; d--; while(d){ if(d>25){ for(int i=0;i<50;i+=2) pic[pos][i]='D'; for(int i=1;i<50;i+=2) pic[pos][i]='C'; d-=25; pos++; for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; } else{ for(int i=0;i<50;i++) pic[pos][i]='C'; for(int i=0;i<d*2;i+=2) pic[pos][i]='D'; pos++; for(int i=0;i<50;i++) pic[pos][i]='C'; pos++; break; } } cout<<pos<<" "<<50<<endl; for(int i=0;i<pos;i++){ for(int j=0;j<50;j++) cout<<pic[i][j]; cout<<endl; } return 0; } //来自https://blog.csdn.net/qq_38891827/article/details/80663106 感谢dalao
好吧我并不知道连通块是什么qwq
#include <bits/stdc++.h> using namespace std; /*【D. A Shade of Moonlight】 在坐标平面上有n个点。从飞机上可以选择的P点开始。如果P不属于S,则P不会被添加到S中。 然后按照给定的顺序重复几次操作(总称为移动)几次: 选择一条直线l,使其穿过S中的至少两个位置,并通过现在所在的位置。 如果有多条这样的线路,则选择一条等距线路移到属于S并且位于l的点之一。 目的地在所有可能的目标中被等量选择,包括菅野目前的位置(如果它属于S)。 有q个查询,每个包含两个整数(ti,mi)。对于每个查询,你需要帮助菅野最大化停止位置 成为S中的第ti个元素的概率,然后通过适当选择P来移动mi,并输出这个最大概率。 请注意,根据规则1,P应该至少属于一条从S经过至少两个点的线。 【in】正整数n(2≤n≤200) - S中的点数。整数xi和yi- S中第i个点的坐标。 输入保证对于全部1≤i<j≤n,(xi,yi)≠(xj,yj)成立。 下一行包含正整数q(1≤q≤200) - 查询数量。 以下每行包含两个空格分隔的整数t和m(1≤ti≤n,1≤mi≤104) - 分别为目标点的索引和移动的数量。 【out】输出q行q个数,其中的第i个表示适当选择起始位置P,在mi步之后停留在第ti个点的最大概率。 如果输出中的每个数字与陪审团回答中的相应数字最多不超过10^-6,则您的答案将被视为正确。 形式上,让你的答案是a,陪审团的答案是b。如果| a-b |≤10-6,则您的答案被认为是正确的。 */
E. A Trance of Nightfall 【埋坑qwq】
——时间划过风的轨迹,那个少年,还在等你。