Gym 100801B Black and White(构造)
题意:给定X,Y,分别表示由'.'和'@'组成的连通块的个数。
思路:假如X<Y,我们用两部分来构造这个结果,第一部分由一个'.'连通块和Y-(X-1)割'@'连通块组成,第二个部分由X-1个'.'连通块和X-1个'@'连通块组成.
其他情况同理.
#include<bits/stdc++.h> using namespace std; const int maxn=10010; int main() { freopen("black.in","r",stdin); freopen("black.out","w",stdout); int N,M,i; scanf("%d%d",&M,&N); //B+W if(N==M){ cout<<1<<" "<<N+M<<endl; for(i=1;i<=N+M;i++) if(i&1) putchar('.');//W else putchar('@');//B } if(N>M){ int same=M-1; int L=(N-same)*2+1; cout<<2<<" "<<L+same*2<<endl; for(i=1;i<=L;i++) if(i&1) putchar('@'); else putchar('.'); for(i=1;i<=same;i++) putchar('.'),putchar('@'); putchar('\n'); for(i=1;i<=L;i++) { putchar('@'); } for(i=1;i<=same;i++) putchar('.'),putchar('@'); } if(M>N){ int same=N-1; int L=(M-same)*2+1; cout<<2<<" "<<L+same*2<<endl; for(i=1;i<=L;i++) if(i&1) putchar('.'); else putchar('@'); for(i=1;i<=same;i++) putchar('@'),putchar('.'); putchar('\n'); for(i=1;i<=L;i++) { putchar('.'); } for(i=1;i<=same;i++) putchar('@'),putchar('.'); } return 0; }
It is your time to fight!