wly09 @ 2024-08-10 14:17:36
#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
函数之前。
有没有人能帮我解决一下?
by wly09 @ 2024-08-10 14:19:23
另外,使用在线 IDE 无法复现。
by sunkuangzheng @ 2024-08-10 14:24:00
洛谷交互题不能用 C++14 (GCC 9) 提交
by 035966_L3 @ 2024-08-10 14:25:46
@sunkuangzheng !?
by wly09 @ 2024-08-10 14:28:36
@sunkuangzheng 我制作其他交互题时没有遇到这种情况。。。
by lkwbian @ 2024-08-10 14:29:03
(别忘把Q的判0加上)
by wly09 @ 2024-08-10 14:30:37
@lkwbian RE 和 solve
无关;并且考虑到 p[0]
的值是未知的,所以我不打算判
by sunkuangzheng @ 2024-08-10 14:32:19
@wly09 额就是你用 C++14(GCC 9)不是一定会出问题,但是有时候就会出现 CE/RE/其他神秘情况。很多洛谷交互题题面里都会注明不要用 C++14(GCC 9)提交,比如 1 2 3
by wly09 @ 2024-08-10 14:33:56
@sunkuangzheng 也就是说这玩意会随机报错?
感谢。