目前两个题解都有问题

第一篇题解:1000000 可以作为根

1
-1000000 1000000000000 -1000000000000000000

第二篇题解:出题人应能够想到从小到大枚举的做法并且刻意将其卡超时,不存在“通常的假设是测试数据不会极端地将所有小数都设置为解”的说法

正解一:显然根最多 600000 个,不断随机取 x,期望大约 2.5 次出答案

可能的不取决于随机化的正解二:真的把每个方程不管用什么方法解出来所有在范围内的根,不过可能比较麻烦

#include <chrono>
#include <iostream>
#include <random>
using namespace std;

using ll = long long;

mt19937 myRand(chrono::steady_clock::now().time_since_epoch().count());
uniform_int_distribution<> distrib(0, 1e6);

int n;
ll a[202020];
ll b[202020];
ll c[202020];

bool Check(ll x) {
    for (int i = 0; i < n; i++) {
        if (c[i] + x * (b[i] + x * (a[i] + x)) == 0) {
            return false;
        }
    }
    return true;
}

void Solve() {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i] >> b[i] >> c[i];
    }
    int res = distrib(myRand);
    while (!Check(res)) {
        res = distrib(myRand);
    }
    cout << res;
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    Solve();
}
// 64 位输出请用 printf("%lld")