rt,看到题目缺 SPJ,自己写了一个。
checker.cpp:
#include "testlib.h"
using namespace std;
string s[14], str[14];
bool vis[11];
bool visbblock[11][11];
int main(int argc, char* argv[]) {
registerTestlibCmd(argc, argv);
int testcase = inf.readInt();
while (testcase--) {
memset(visbblock, 0, sizeof visbblock);
int Size = 0;
while (Size < 9) {
s[++Size] = ouf.readToken();
if (s[Size].size() != 9 || (int)s[Size].size() == 0) {
quitf(_wa, "Your answer isn't correct.");
return 0;
}
}
int ansSize = 0;
while (ansSize < 9) {
str[++ansSize] = inf.readToken();
}
for (int i = 1; i <= 9; i++) {
for (int j = 0; j < 9; j++) {
if (s[i][j] < '0' || s[i][j]>'9') {
quitf(_wa, "Your answer isn't numbers.");
return 0;
}
if (s[i][j] == '0') {
quitf(_wa, "Your answer didn't complete Sudoku.");
return 0;
}
if (str[i][j] != '0' && s[i][j] != str[i][j]) {
quitf(_wa, "Your answer didn't work on the original Sudoku.");
return 0;
}
}
}
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) vis[j] = 0;
for (int j = 0; j < 9; j++) {
if (vis[s[i][j] - '0'] == 1) {
quitf(_wa, "Your answer isn't correct.");
return 0;
}
vis[s[i][j] - '0'] = 1;
}
}
for (int i = 0; i < 9; i++) {
for (int j = 1; j <= 9; j++) vis[j] = 0;
for (int j = 1; j <= 9; j++) {
if (vis[s[j][i] - '0'] == 1) {
quitf(_wa, "Your answer isn't correct.");
return 0;
}
vis[s[j][i] - '0'] = 1;
}
}
for (int i = 1; i <= 9; i++) {
for (int j = 0; j < 9; j++) {
if (visbblock[(i - 1) / 3 * 3 + j / 3][s[i][j] - '0'] == 1) {
quitf(_wa, "Your answer isn't correct.");
return 0;
}
visbblock[(i - 1) / 3 * 3 + j / 3][s[i][j] - '0'] = 1;
}
}
}
quitf(_ok, "Your answer is correct.stO Orz!!!");
return 0;
}