#15WA了,80分求调
查看原帖
#15WA了,80分求调
541553
wangshi楼主2022/3/21 11:28
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int N=101,M=100010;
int s[N][N],ans1[M],ans2[M],cnt;
int main()
{
	ios::sync_with_stdio(0);
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>s[i][j];
	for(int i=1;i<=n;i++)
	{
		if(s[i][1]>s[i][m])
		{
			ans1[++cnt]=0,ans2[cnt]=i;
			int f[N]={0},cnt1=0;
			for(int j=1;j<=m;j++)
				f[j]=s[i][j];
			for(int j=m;j>=1;j--)
				s[i][++cnt1]=f[j];
		}
	}
	for(int i=1;i<=n/2;i++)
	{
		for(int j=1;j<=m/2;j++)
		{
			int t[N]={0},a,b,c,d;
			a=s[i][j],b=s[i][m-j+1],c=s[n-i+1][j],d=s[n-i+1][m-j+1];
			t[a]++,t[b]++,t[c]++,t[d]++;
			if(t[j]!=2||t[m-j+1]!=2) 
			{
				cout<<"NO"<<endl;
				return 0;
			}
			if(a==j&&c==j&&b==m-j+1&&d==m-j+1) continue;//全对 
			if(a!=j&&c!=j&&b!=m-j+1&&d!=m-j+1)//全错 
			{
				ans1[++cnt]=0,ans2[cnt]=i;
				ans1[++cnt]=1,ans2[cnt]=j;
				ans1[++cnt]=1,ans2[cnt]=m-j+1;
				ans1[++cnt]=0,ans2[cnt]=i;
				ans1[++cnt]=1,ans2[cnt]=j;
				ans1[++cnt]=1,ans2[cnt]=m-j+1;
				continue;
			}
			if(a==j)//上面第一个数对了 
			{
				if(b==m-j+1)//第二个数对了 
				{
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=n-i+1;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=n-i+1;
				}
				else//错了 
				{
					ans1[++cnt]=0,ans2[cnt]=n-i+1;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=n-i+1;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;					
				}
			}
			else//上面第一个数错了 
			{
				if(b==m-j+1) //第二个数对了 
				{
					ans1[++cnt]=0,ans2[cnt]=i;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=i;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;						
				}
				else//错了 
				{
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=i;
					ans1[++cnt]=1,ans2[cnt]=m-j+1;
					ans1[++cnt]=0,ans2[cnt]=i;						
				}					
			}
		}
	}
	cout<<"YES"<<endl<<cnt<<endl;
	for(int i=1;i<=cnt;i++)
	{
		cout<<ans1[i]<<" "<<ans2[i]<<endl;
	}
	return 0;
}
2022/3/21 11:28
加载中...