交互题制作求助
  • 板块学术版
  • 楼主weilycoder
  • 当前回复8
  • 已保存回复8
  • 发布时间2024/8/10 14:17
  • 上次更新2024/8/10 15:01:21
查看原帖
交互题制作求助
818693
weilycoder楼主2024/8/10 14:17
#include <algorithm>
#include <cstdlib>
#include <iostream>
#include <numeric>
#include <random>

extern "C" bool Q(const int i, const int j, const int k);
extern "C" bool C(const int i, const int j);
extern "C" int solve(int n);

static int code = -1, *p;

bool Q(const int i, const int j, const int k) { return (p[i] - p[j]) % k == 0; }
bool C(const int i, const int j) {
  static int cnt = 0;
  if (cnt)
    std::cout << "Call C once more" << std::endl;
  return p[i] < p[j];
}

int main() {
  auto p = [] { std::cout << code << std::endl; };
  auto q = [] { std::cout << "at_quick_exit" << std::endl; };
  atexit(p);
  at_quick_exit(q);
  int n;
  std::cin >> n;
  ::p = new int[n];
  --::p;
  std::iota(::p + 1, ::p + n + 1, 1);
  std::random_device real_rnd;
  std::mt19937 rnd(real_rnd());
  std::shuffle(::p + 1, ::p + n + 1, rnd);
  code = ::p[solve(n)];
  delete[] (++::p);
  return 0;
}

这是我为某个交互题编写的交互库,在测试时使用 C++14 (GCC 9) 提交,但是全部 RE,提示信息是:

Runtime Error.

Received signal 11: Segmentation fault with invalid memory reference.

使用其他 C++ 可以 AC。

通过定义 solve 函数

int solve(int n) {
  exit(0);
}

确定了问题在调用 solve 函数之前。

有没有人能帮我解决一下?

2024/8/10 14:17
加载中...