自制 SPJ,望采纳
查看原帖
自制 SPJ,望采纳
142338
pythoner713楼主2021/2/1 11:58

本题的 checker.cpp:

#include "testlib.h"
#include<cstring>
#define nb 100010
using namespace std;

int r, c, B, W, BB, WW;
int dx[4] = {1, 0, -1, 0};
int dy[4] = {0, 1, 0, -1};
string s[nb];
vector<bool> vis[nb];

void init(){
	for(int i = 0; i < r; i++){
		for(int j = 0; j < c; j++){
			vis[i].push_back(0);
		}
	}
}

void dfs(int x, int y){
	vis[x][y] = 1;
	for(int i = 0; i < 4; i++){
		int x_ = x + dx[i], y_ = y + dy[i];
		if(x_ < 0 || x_ >= r || y_ < 0 || y_ >= c) continue;
		if(s[x_][y_] == s[x][y] && !vis[x_][y_]) dfs(x_, y_);
	}
}

int main(int argc, char* argv[]){
	registerTestlibCmd(argc, argv);

	r = ouf.readInt();
	c = ouf.readInt();
	ouf.readEoln();

	if(r * c > 100000){
		quitf(_wa, "The panel is too big.");
	}
	for(int i = 0; i < r; i++){
		s[i] = ouf.readLine();
		if(s[i].size() != c){
			quitf(_wa, "The size does not match.");
		}
	}

	init();
	for(int i = 0; i < r; i++){
		for(int j = 0; j < c; j++){
			if(!vis[i][j]){
				dfs(i, j);
				(s[i][j] == '@') ? ++B : ++W;
			}
		}
	}

	BB = inf.readInt(), WW = inf.readInt();
	if(B != BB) quitf(_wa, "Expect %d black connected area(s), found %d", BB, B);
	if(W != WW) quitf(_wa, "Expect %d white connected area(s), found %d", WW, W);
	quitf(_ok, "The answer is correct.");
}

第一次用 testlib 库,已通过自制数据测试,若有 bug 欢迎指正

2021/2/1 11:58
加载中...