如果不是我的头脑十分不清醒,那么本题应当添加 SPJ。
以下是我写的 SPJ,我认为它是对的。
#include <bits/stdc++.h>
#include "testlib.h"
using namespace std;
namespace QYB {
int n, m, a[405], t[105][105];
bool check(InStream &stream) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
t[i][j] = stream.readInt(0, 1);
}
} for (int i = 1; i <= 2 * (n + m); i++) {
int x = (i <= n? i: (i <= n + m? n + 1: (i <= n + m + n? n + m + n - i + 1: 0)));
int y = (i <= n? 0: (i <= n + m? i - n: (i <= n + m + n? m + 1: n + m + n + m - i + 1)));
int dx = (i <= n? 0: (i <= n + m? -1: (i <= n + m + n? 0: 1)));
int dy = (i <= n? 1: (i <= n + m? 0: (i <= n + m + n? -1: 0)));
do {
x += dx; y += dy;
if (t[x][y]) swap(dx, dy), dx = -dx, dy = -dy;
} while (x >= 1 && x <= n && y >= 1 && y <= m);
int cur = y == 0? x: (x == n + 1? y + n: (y == m + 1? n - x + 1 + n + m: m - y + 1 + n + m + n));
if (cur != a[i]) return false;
} return true;
} int main(int argc, char **argv) {
registerTestlibCmd(argc, argv);
n = inf.readInt(1, 100);
m = inf.readInt(1, 100);
for (int i = 1; i <= 2 * (n + m); i++) {
a[i] = inf.readInt(1, 2 * (n + m));
} if (!check(ans)) quitf(_fail, "Jury's answer is invalid.");
if (!check(ouf)) quitf(_wa, "Participant's answer is invalid.");
quitf(_ok, "Accepted!");
return 0;
}
} int main(int argc, char **argv) { return QYB::main(argc, argv); }
顺便一提,本题应当在【题目描述】中增加一句描述“保证有解”。