Checker Finished.
查看原帖
Checker Finished.
60864
tiger2005楼主2021/2/2 11:58

请管理员检查答案文件个格式。如果只有 IMPOSSIBLEPOSSIBLE ,请把两个注释中间的代码去掉。

#include "testlib.h"

using namespace std;
int T,N,M;
char str[55][55];
char aft[55][55];
bool lig[55][55];
char getSingleChar(InStream& x){
	char ret=x.readChar();
	while(isspace(ret))	ret=x.readChar();
	return ret;
}
void GoLight(int x,int y,int dx,int dy){
	if(x<=0 || x>N || y<=0 || y>M)	return;
	if(aft[x][y]=='-' || aft[x][y]=='|')
		quitf(_wa, "Wrong Answer: Cannon Damaged!");
	lig[x][y]=true;
	if(aft[x][y]=='\\')	swap(dx,dy);
	if(aft[x][y]=='/')	swap(dx,dy),dx*=-1,dy*=-1;
	GoLight(x+dx,y+dy,dx,dy);
}
int main(int argc,char ** argv){
	registerTestlibCmd(argc,argv);
	T=inf.readInt();
	while(T--){
		N=inf.readInt();M=inf.readInt();
		for(int i=1;i<=N;i++)
			for(int j=1;j<=M;j++)
				str[i][j]=getSingleChar(inf);
		string qans = ouf.readWord();
		string rans = ans.readWord();
		if(qans!=rans)
			quitf(_wa, "Wrong Answer: Judge Error!");
		if(rans=="POSSIBLE"){
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++)
					aft[i][j]=getSingleChar(ouf);
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++){
					if((str[i][j]=='|' || str[i][j]=='-') ^ (aft[i][j]=='|' || aft[i][j]=='-'))
						quitf(_wa, "Wrong Answer: Invalid Changes!");
					if(str[i][j]!='|' && str[i][j]!='-' && str[i][j]!=aft[i][j])
						quitf(_wa, "Wrong Answer: Invalid Changes!");
				}
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++)
					lig[i][j]=false;
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++){
					if(aft[i][j]=='|')
						GoLight(i-1,j,-1,0),GoLight(i+1,j,1,0);
					if(aft[i][j]=='-')
						GoLight(i,j-1,0,-1),GoLight(i,j+1,0,1);
				}
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++)
					if(aft[i][j]=='.' && !lig[i][j])
						quitf(_wa, "Wrond Answer: Dark Remain!");
			//
			for(int i=1;i<=N;i++)
				for(int j=1;j<=M;j++)
					getSingleChar(ans);
			//
		}
	}
	quitf(_ok, "Answer Correct!");
	return 0;
}
2021/2/2 11:58
加载中...