SPJ
查看原帖
SPJ
764666
LostKeyToReach楼主2024/5/16 15:30

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;
}
2024/5/16 15:30
加载中...