题面:
传送门
思路:
一眼看上去是一道很迷的题目......直到我发现,红蓝色涂色的过程是互相独立的
而且最外围没有紫色
那么可以这样操作:
最左边一列全部红色,最右边一列全蓝
然后中间的一行红一行蓝
最后把紫的都涂上就好了
这样保证同色联通
Code:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 inline int read(){ 7 int re=0,flag=1;char ch=getchar(); 8 while(ch>‘9‘||ch<‘0‘){ 9 if(ch==‘-‘) flag=-1; 10 ch=getchar(); 11 } 12 while(ch>=‘0‘&&ch<=‘9‘) re=(re<<1)+(re<<3)+ch-‘0‘,ch=getchar(); 13 return re*flag; 14 } 15 int n,m; 16 bool a[510][510],b[510][510]; 17 int main(){ 18 int i,j;char s[510]; 19 n=read();m=read(); 20 for(i=1;i<=n;i++){ 21 scanf("%s",s); 22 for(j=1;j<=m;j++){ 23 if(s[j-1]==‘#‘) a[i][j]=b[i][j]=1; 24 } 25 } 26 for(i=1;i<=n;i++) a[i][1]=1,b[i][m]=1; 27 for(i=1;i<=n;i++){ 28 for(j=2;j<m;j++){ 29 if(i%2) a[i][j]=1; 30 else b[i][j]=1; 31 } 32 } 33 for(i=1;i<=n;i++){ 34 for(j=1;j<=m;j++){ 35 if(a[i][j]) putchar(‘#‘); 36 else putchar(‘.‘); 37 } 38 putchar(‘\n‘); 39 } 40 putchar(‘\n‘); 41 for(i=1;i<=n;i++){ 42 for(j=1;j<=m;j++){ 43 if(b[i][j]) putchar(‘#‘); 44 else putchar(‘.‘); 45 } 46 putchar(‘\n‘); 47 } 48 }