用了简单的做法 lower_bound
看了他们暴力枚举才知道二分的使用意义 就是在查询能否在数组中找到-c这个值
#include <bits/stdc++.h> using namespace std; const int N = 1010; int a[N]; int n, x; bool find(int c) { return c == *lower_bound(a, a+n, c); } int main() { cin >> n >> x; for (int i = 0; i < n; i ++) cin >> a[i]; sort(a, a+n); bool flag = false; for (int i = 0; i < n; i ++) for (int j = 0; j < n; j ++) { int c = a[i]*a[i]*x + a[j]*x; if (find(-c)) { flag = true; } } if (flag) puts("YES"); else puts("NO"); return 0; }