UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#200515#536. 打地鼠wosile10068ms3252kbC++112.2kb2024-01-04 11:56:582024-01-04 12:08:17

answer

#include<bits/stdc++.h>
using namespace std;
int n,m;
char a[1005][1005],b[1005][1005];
int cntr[1005],cntc[1005];
int coverr[1005],coverc[1005];
queue<int>qx,qy;
int vis[1005][1005];
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
	for(int i=1;i<=n;i++)scanf("%s",b[i]+1);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(b[i][j]=='X'){
		cntr[i]++;
		cntc[j]++;
	}
	int fl=1;
	int nc=0;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
		nc|=(a[i][j]!=b[i][j]);
		if(cntr[i]>1 && cntc[j]>1){
			if(a[i][j]!=b[i][j])fl=0;
		}
		if(cntr[i]<=1 && cntc[j]>1){
			if(a[i][j]<b[i][j])fl=0;
			if(a[i][j]>b[i][j])coverr[i]=1;
			if(b[i][j]=='X'){
				if(coverr[i]==1)fl=0;
				else coverr[i]=-1;
			}
		}
		if(cntc[j]<=1 && cntr[i]>1){
			if(a[i][j]<b[i][j])fl=0;
			if(a[i][j]>b[i][j])coverc[j]=1;
			if(b[i][j]=='X'){
				if(coverc[j]==1)fl=0;
				else coverc[j]=-1;
			}
		}
	}
	int fe=0,st=0;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(cntr[i]<=1 && cntc[j]<=1){
		// printf("%d %d %c %d %d\n",i,j,a[i][j],coverr[i],coverc[j]);
		if(coverr[i]>=0 && coverc[j]>=0 && b[i][j]=='X')fe=1;
		if(a[i][j]=='O' && coverr[i]>=0 && coverc[j]>=0){
			// printf("???\n");
			qx.push(i);
			qy.push(j);
			vis[i][j]=1;
		}
	}
	while(!qx.empty()){
		int fx=qx.front();qx.pop();
		int fy=qy.front();qy.pop();
		// printf("bfs %d %d\n",fx,fy);
		if(fx==0){
			for(int i=1;i<=n;i++)if(cntr[i]<=1 && vis[i][fy]==0){
				vis[i][fy]=1;
				qx.push(i);
				qy.push(fy);
			}
		}
		else if(fy==0){
			for(int i=1;i<=m;i++)if(cntc[i]<=1 && vis[fx][i]==0){
				vis[fx][i]=1;
				qx.push(fx);
				qy.push(i);
			}
		}
		else{
			if(coverr[fx]>=0 && coverc[fy]>=0){
				if(vis[fx][0]==0){
					qx.push(fx);
					qy.push(0);
					vis[fx][0]=1;
				}
				if(vis[0][fy]==0){
					qx.push(0);
					qy.push(fy);
					vis[0][fy]=1;
				}
			}
		}
	}
	for(int i=1;i<=n;i++)if(coverr[i]==1)fl&=vis[i][0];
	for(int i=1;i<=m;i++)if(coverc[i]==1)fl&=vis[0][i];
	// printf("%d\n",fl);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(cntr[i]<=1 && cntc[j]<=1 && a[i][j]!=b[i][j]){
		fl&=vis[i][j];
		// printf("%d %d vis=%d\n",i,j,vis[i][j]);
	}
	fl&=(nc==0 || fe==1);
	printf("%d",fl);
	return 0;
}
// quod erat demonstrandum

Details

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 20
Accepted

Test #1:

score: 20
Accepted
time: 0ms
memory: 1264kb

input:

4 4
OOOX
XXXX
OOXO
XXOO
OOXX
OOOO
XOOX
XOOX

output:

0

result:

ok "0"

Test #2:

score: 0
Accepted
time: 1ms
memory: 1272kb

input:

4 4
OXXO
OXOX
XOOX
XOOO
OOOO
OXOO
OXXX
XOOO

output:

0

result:

ok "0"

Test #3:

score: 0
Accepted
time: 0ms
memory: 1264kb

input:

4 4
OOXX
XXOX
OXOX
XXXX
XXOO
XOXO
OOOX
XXXO

output:

0

result:

ok "0"

Test #4:

score: 0
Accepted
time: 0ms
memory: 1272kb

input:

4 4
XXXX
XXOO
OXOX
XXXO
OXXO
OOOX
XOOO
OXXO

output:

1

result:

ok "1"

Test #5:

score: 0
Accepted
time: 0ms
memory: 1272kb

input:

4 4
XOOO
XXXX
XOOX
XOXO
OXOO
XOOO
XOOO
OOOO

output:

1

result:

ok "1"

Test #6:

score: 0
Accepted
time: 0ms
memory: 1268kb

input:

4 4
OOOO
XOOO
OOOO
OXOX
OOXO
OOOO
OOOX
OOOO

output:

1

result:

ok "1"

Subtask #2:

score: 30
Accepted

Test #7:

score: 30
Accepted
time: 0ms
memory: 1348kb

input:

50 50
XOOOOOXOXXOOOOXXOOOXXXXXXOOOOOXOXOXXXXOXOOXXXXXOOO
OXOOXOOOOXXOOOOXOOXXXOOXXXXXOXXOXOXXOOOXOXO...

output:

0

result:

ok "0"

Test #8:

score: 0
Accepted
time: 0ms
memory: 1352kb

input:

50 50
XXXXXOXXOOOOXXOXOOXOOOOXXOOOOXOOXOOOXXOOOOOXOXXXOO
OXXXOXXXOOXOOXXXOOXOXXXOXOOXOOOXOXXXXXXXXXO...

output:

0

result:

ok "0"

Test #9:

score: 0
Accepted
time: 0ms
memory: 1352kb

input:

50 50
XOOOOOXOOOOXXOXXOXXOOXXOXXOXOXOOOXXXOXXXXOOXOOOXXO
OOOOXXXOXOOOXXXXOOXOXXXOOOXXOXOOOXXOXXOOOXX...

output:

0

result:

ok "0"

Test #10:

score: 0
Accepted
time: 0ms
memory: 1364kb

input:

50 50
OOOXXXOOXXOOOXOXOOXXOOXXOOXOXXXXOOXOOOOOXXXOXOOXOO
XXXXXOXXXXXXXOOOOXXXOXXXOXOXXXOOXXOOOOOXXXX...

output:

1

result:

ok "1"

Test #11:

score: 0
Accepted
time: 0ms
memory: 1372kb

input:

50 50
OXXOOXOOXXOXXXOOXOXOXXXOXXOXOOOXOOOXOOOOOOOOOOOOXO
XXXOOXOOXXXOOOOXOXOOXXXOXOXOXOXOOXXOOOXOXXO...

output:

1

result:

ok "1"

Test #12:

score: 0
Accepted
time: 0ms
memory: 1364kb

input:

50 50
XOOOXXXXOXOXXXXOXOOXXXOOOXXOOXXOOOXXOXXXOOXOOXXOOX
OOXXXOXOOXOOOOXXOXXOXOXOOOOOXOOOXOXOOXXXXOO...

output:

1

result:

ok "1"

Subtask #3:

score: 50
Accepted

Test #13:

score: 50
Accepted
time: 11ms
memory: 3220kb

input:

1000 1000
XXOXOOXOOXOXXXXOOOXXOXOXOXXOXOXOOXOOOOXXOOOXOOOOXOOOOOXXOXXXOXOOXXXOXXXOXOOOXXXXOXOOOOOXXO...

output:

0

result:

ok "0"

Test #14:

score: 0
Accepted
time: 16ms
memory: 3220kb

input:

1000 1000
XXOXXOXOXXXOOOXOOOXOOXXXOOOOXXOXXOXXXOOXOXOOOOXXOXXXXXOOOXOXXXXOOOOOXOXOOOXXOXXXXXXOXOXXXO...

output:

0

result:

ok "0"

Test #15:

score: 0
Accepted
time: 6ms
memory: 3216kb

input:

1000 1000
OXOOXXOXXXXXOXXXXXOXXOXOXXXOXOXOOOXOXOOXOOXOXXOXOXXOOXXOXXOXXOXOOXOOXXOOXXXXXOXOXOXOOOOXOX...

output:

0

result:

ok "0"

Test #16:

score: 0
Accepted
time: 13ms
memory: 3224kb

input:

1000 1000
OOOXOXOOOOXOXXOXXOOOXOXXOXXOOOOOXOOOOXXOOOXOOOXXXOOOXOOOOXXOOXXOOOOXOOOXXOXXOXXOOOXXOXOXXX...

output:

1

result:

ok "1"

Test #17:

score: 0
Accepted
time: 10ms
memory: 3252kb

input:

1000 1000
XXOXXXXXXXXXOXOOXOXOOXXXOOOOOOOOOXOXOOXOXXOOOXXOXOXOOXOOXOXOXOXXXOXOXXXXOOXXXXOXOXOOXXXXOX...

output:

1

result:

ok "1"

Test #18:

score: 0
Accepted
time: 11ms
memory: 3228kb

input:

1000 1000
XXXXXOOOXXOXOOOOXXOOXOOXXOOOXXXXXXXOXXXXXXXOOOXOXOXXXOXXOXXOXXOOOOXOOXOOXOXOOXOOXOOXOXOXXO...

output:

1

result:

ok "1"

Extra Test:

score: 0
Extra Test Passed