WA(#16#33),40pts求助
查看原帖
WA(#16#33),40pts求助
287947
Icyfires18楼主2022/3/22 01:03

记录

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
const int N=101;
int n,m,cnt,a[N][N];
string str[N][N];
inline void fip(int &rer){
	register char ch;
	for(ch=0;ch<'0'||ch>'9';ch=getchar());
	for(rer=0;ch>='0'&&ch<='9';ch=getchar())
		rer=(rer<<3)+(rer<<1)+(ch^48);
}
void reverse(int col){
	register int i,j;
	for(i=1,j=n;i<j;++i,--j)
		swap(a[i][col],a[j][col]);
}
void deal(int x0,int y0,int x1,int y1){
	static string s;
	s.clear();
	s+=(a[x0][y0]==y0? "0":"1");
	s+=(a[x1][y0]==y0? "0":"1");
	s+=(a[x0][y1]==y0? "0":"1");
	s+=(a[x1][y1]==y0? "0":"1");
	if(s=="0101")cnt+=4,str[x0][y0]="DRDR";
	if(s=="0110")cnt+=4,str[x0][y0]="RDRD";
	if(s=="1001")cnt+=4,str[x0][y0]="RURU";
	if(s=="1010")cnt+=4,str[x0][y0]="URUR";
	if(s=="1100")cnt+=4,str[x0][y0]="ULRU",
		reverse(y0),reverse(y1);
}
void print(int x0,int y0,int x1,int y1){
	for(auto i:str[x0][y0]){
		if(i=='U')printf("0 %d\n",x0);
		if(i=='D')printf("0 %d\n",x1);
		if(i=='L')printf("1 %d\n",y0);
		if(i=='R')printf("1 %d\n",y1);
	}
}
int main(){
	register int i,j,k;
	scanf("%d%d",&n,&m);
	for(i=1;i<=n;++i)
	for(j=1;j<=m;++j){
		fip(k),a[i][j]=k;
		if(k!=j&&k!=m+1-j){
			puts("NO");return 0;}
	}puts("YES");
	for(i=n>>1;i>=1;--i)
	for(j=m>>1;j>=1;--j)
		deal(i,j,n+1-i,m+1-j);
	printf("%d\n",cnt);
	for(i=n>>1;i>=1;--i)
	for(j=m>>1;j>=1;--j)
		print(i,j,n+1-i,m+1-j);
	return 0;
}

Call me if the explanation is needed.

2022/3/22 01:03
加载中...