#include
using namespace std;
struct node{
int a,b;
}nw,w[5000000];
queueq;
int n,m,tot,ans[3000][3000],xx[5]={0,0,1,0,1},yy[5]={0,0,0,1,1};
char xxx;
int f(int xx){
return xx==0?1:0;
}
bool S(int x,int y){
if(!x||!y||x==n||y==m)
return 1;
int cnt=0;
if(ans[x][y]==-1) ++cnt;
if(ans[x+1][y]==-1) ++cnt;
if(ans[x][y+1]==-1) ++cnt;
if(ans[x+1][y+1]==-1) ++cnt;
if(cnt>1){
return 1;
}
if(!cnt)
return ans[x][y]==ans[x+1][y] || ans[x][y]==ans[x][y+1] || ans[x][y]!=ans[x+1][y+1];
node t;
if(ans[x][y]==ans[x+1][y+1]) {
if(ans[x+1][y]==-1 && ans[x][y]!=ans[x][y+1]){
ans[x+1][y]=f(ans[x][y+1]);
t.a=x+1;
t.b=y;
q.push(t);
}
if(ans[x][y+1]==-1 && ans[x][y]!=ans[x+1][y]) {
ans[x][y+1]=f(ans[x+1][y]);
t.a=x;
t.b=y+1;
q.push(t);
}
}
if(ans[x+1][y]==ans[x][y+1]) {
if(ans[x][y]==-1 && ans[x+1][y]!=ans[x+1][y+1]){
ans[x][y]=f(ans[x+1][y+1]);
t.a=x;
t.b=y;
q.push(t);
}
if(ans[x+1][y+1]==-1 && ans[x+1][y]!=ans[x][y]){
ans[x+1][y+1]=f(ans[x][y]);
t.a=x+1;
t.b=y+1;
q.push(t);
}
}
return 1;
}
int main(){
cin>>n>>m;
node t;
for(int i=1;i<=n;i++){
for(int j=1;j>xxx;
if(xxx=='1'||xxx=='0'){
ans[i][j]=xxx-'0';
}
else{
t.a=i;
t.b=j;
q.push(t);
ans[i][j]=-1;
}
}
}
t.a=1;t.b=1;
for(;;){
if(!q.empty()){
while(t.a<=n&&ans[t.a][t.b]!=-1){
if(t.bn)
break;
ans[t.a][t.b]=0;
q.push(t);
}
t=q.front();
q.pop();
if(!S(t.a,t.b)) {
printf("No\n");
return 0;
}
if(!S(t.a-1,t.b)) {
printf("No\n");
return 0;
}
if(!S(t.a,t.b-1)) {
printf("No\n");
return 0;
}
if(!S(t.a-1,t.b-1)) {
printf("No\n");
return 0;
}
}
cout<<"Yes"<<endl;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<ans[i][j];
}
cout<<endl;
}
return 0;
}
改烂了,挂一个先
1.魔法阵
能转换到最小生成树,但实际上看的时候根本没看出来,签到题不是很友好。
2.猫猫
进行一个状态的转换,但是好像打到最后连标程都超时。
3.
我忘了
4.棋盘
狠狠的枚举问号,达成了问号越多问号越少的成就,拿了他个60,tj思路很巧,先定能定,然后继续定,然后我写炸了,改到了最后终于把样例过不了了