请求添加 SPJ
查看原帖
请求添加 SPJ
172003
qinyubo芙门楼主2024/6/21 14:10

如果不是我的头脑十分不清醒,那么本题应当添加 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); }

顺便一提,本题应当在【题目描述】中增加一句描述“保证有解”。

2024/6/21 14:10
加载中...