SPJ的实现

Speical Judge

指那种存在多解性答案的评测.
今天鲁学长给我们讲了一个简单的模板

以下时根据CF题来写的一个简单的评测

//spj
#pragma GCC optimize("Ofast","inline",3)
#include<fstream>
#include<iostream>
#include<cstring>
#include<functional>
using namespace std;
int a,b;
char mp[101][101];
bool land[101][101];
void dfs(int x,int y)
{
    if(x>a||y>b||x<1||y<1||mp[x][y]=='S'||land[x][y])return;
    if(mp[x][y]=='L')land[x][y]=1;
    int ope[4][2]={{1,0},{0,1},{0,-1},{-1,0}};
    for(int i=0;i<4;i++)
    dfs(x+ope[i][0],y+ope[i][1]);
}
int main(int argc, char *argv[]) {
    ifstream in, out, std;
    in.open(argv[1]);//打开输入文件
    std.open(argv[2]);//打开标准答案文件
    out.open(argv[3]);//打开待评测文件
    
    in>>a>>b;
    string ans;
    std >> ans;
    string subm;
    out >> subm;
    if(subm != ans)
    {
    	//printf("%d",1);
       	return 1;//WA
	}
    for(int i=1;i<=a;i++)
    {
    	for(int j=1;j<=a;j++)
    	{
    		out>>mp[i][j];
		}
	}
	int sand=0;
    for(int i=1;i<=a;i++)
    {
    	for(int j=1;j<=b;j++)
    	{
    		if(mp[i][j]=='L'&&land[i][j]==0)
    		{
    			sand++;
    			dfs(i,j);
			}
		}
	}
	if(sand!=b)
	{
		//printf("b==%d sand==%d\n%d",b,sand,1);
		//cout<<1;
		return 1;//WA
	}
	//printf("%d\n",0);
	//printf("a==%d b==%d ans==%s subm==%s\n argc==%d argv[1]==%s argv[2]==%s argv[3]==%s",a,b,ans,subm,argc,argv[1],argv[2],argv[3]);
    return 0;//AC 

}

与平时写的不同之处在于main()里有了参数,在运行时可以往里面传参数
具体目前暂时也不是很懂.等以后学更深的内容再来补充吧

posted @ 2022-08-26 10:26  qbning  阅读(43)  评论(0编辑  收藏  举报
描述