#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】
——时间划过风的轨迹,那个少年,还在等你。