目前两个题解都有问题
第一篇题解: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")

京公网安备 11010502036488号