1 条题解

  • 0
    @ 2026-5-5 16:31:49
    #include<bits/stdc++.h>
    using namespace std;
    const int N=305;
    int n,m,mv[400005][2][2],vis[N][N],cnt=0;
    char s[100005];
    void add(int x1,int y1,int x2,int y2){
    	mv[++cnt][0][0]=x1;
    	mv[cnt][0][1]=y1;
    	mv[cnt][1][0]=x2;
    	mv[cnt][1][1]=y2;
    	vis[x2][y2]++;
    }
    void Move(int x,int y,bool t){
    	if (t){
    		if (x!=2)add(x,y,2,y);
    		else add(x,y,2,y==1?2:1);
    	}
    	else{
    		if (x!=1)add(x,y,1,y);
    		else add(x,y,1,y==1?2:1);
    	}
    }
    int main(){
    	scanf("%d%d",&n,&m);
    	for (int i=1;i<=n;i++)
    		for (int j=1;j<=m;j++){
    			scanf("%s",s);
    			for (int k=strlen(s)-1;k>=0;k--)
    			Move(i,j,s[k]=='1');
    		}
    	for (int i=1;i<=2;i++)
    		for (int j=2;j<=m;j++){
    			for (int k=1;k<=vis[i][j];k++)add(i,j,i,1);
    			vis[i][j]=0;
    		}
    	int tot=cnt;
    	for (int i=1;i<=n;i++)
    		for (int j=1;j<=m;j++){
    			scanf("%s",s);
    			for (int k=0;s[k];k++)
    			Move(i,j,s[k]=='1');
    		}
    	for (int i=1;i<=2;i++)
    		for (int j=2;j<=m;j++)
    			for (int k=1;k<=vis[i][j];k++)add(i,j,i,1);
    	printf("%d\n",cnt);
    	for (int i=1;i<=tot;i++)
    	printf("%d %d %d %d\n",mv[i][0][0],mv[i][0][1],mv[i][1][0],mv[i][1][1]);
    	for (int i=cnt;i>tot;i--)
    	printf("%d %d %d %d\n",mv[i][1][0],mv[i][1][1],mv[i][0][0],mv[i][0][1]);
    }
    
    • 1

    信息

    ID
    6849
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者