社区讨论

为什么答案对了仍然报WA

P1205[USACO1.2] 方块转换 Transformations参与者 2已保存回复 2

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
2 条
当前快照
1 份
快照标识符
@m3bk2e42
此快照首次捕获于
2024/11/10 20:13
去年
此快照最后确认于
2025/11/04 14:57
4 个月前
查看原帖
只对了第一个测试点,第二个下载后发现和输出一样但是交上去就WA了 哭了,代码应该不需要看了吧
CPP
#include<iostream>
#include<cstdio>
using namespace std;
int n=0,n1[11][11]={0},n2[11][11]={0};
bool f=true,ans[6]={false};
char tmp=0;
bool f1(int x[11][11],int m){
	int end[11][11];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			end[j][m+1-i]=x[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(n2[i][j]!=end[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool f2(int x[11][11],int m){
	int end[11][11];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			end[m+1-i][m+1-j]=x[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(n2[i][j]!=end[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool f3(int x[11][11],int m){
	int end[11][11];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			end[m+1-j][i]=x[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(n2[i][j]!=end[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool f4(int x[11][11],int m){
	int end[11][11];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			end[i][m+1-j]=x[i][j];
		}
	}
	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			if(n2[i][j]!=end[i][j]){
				return false;
			}
		}
	}
	return true;
}
bool f5(int x[11][11],int m){
	int end[11][11];
 	for(int i=1;i<=m;i++){
		for(int j=1;j<=m;j++){
			end[i][m+1-j]=x[i][j];
		}
	}
	return f1(end,m)||f2(end,m)||f3(end,m);
}
int main(){
	int n;
	scanf("%d",&n);
	if(n==1){
		printf("1");
		return 0;
	}
	getchar();
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%c",&tmp);
			if(tmp=='@'){
				n1[i][j]=0;
			}else{
				n1[i][j]=1;
			}
		}
		getchar();
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			scanf("%c",&tmp);
			if(tmp=='@'){
				n2[i][j]=0;
			}else{
				n2[i][j]=1;
			}
		}
		getchar();
	}
	ans[1]=f1(n1,n);ans[2]=f2(n1,n);ans[3]=f3(n1,n);ans[4]=f4(n1,n);ans[5]=f5(n1,n);
	for(int i=1;i<=5;i++){
		if(ans[i]){
			printf("%d",i);
			return 0;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			if(n1[i][j]!=n2[i][j]){
				f=false;
				break;
			}
		}
	}
	if(f){
		printf("6");
		return 0;
	}
	printf("7");
	return 0;
}

回复

2 条回复,欢迎继续交流。

正在加载回复...