题目详情
给出n个整数和x,请问这n个整数中是否存在三个数a,b,c使得ax2+bx+c=0,数字可以重复使用。
输入描述:
第一行两个整数n,x
第二行n个整数a[i]表示可以用的数
1 <= n <= 1000, -1000 <= a[i], x <= 1000
输出描述:
YES表示可以
NO表示不可以
输入
2 1 1 -2
输出
YES
要使用二分法解答此题,我觉得应该先找到该在哪使用二分法。
其实要解这个ax^2+bx+c=0二元一次方程,因为x是固定的,所以只需要确定a和b后,用二分法查找是否有满足条件的c,如果有则直接输出"YES"后return 0,如果遍历完后发现没有则输出"NO"后return 0 。
-AC代码
#include <iostream>
#include <algorithm>
using namespace std;
int n, a[1000];
bool find(int temp) { //采用 二分查找
int l = 0, r = n - 1;
while (l <= r) {
int mid = (l+r)/2;
if (a[mid] == temp) {
return true;
}
else if (a[mid] > temp) {
r = mid - 1;
}
else {
l = mid + 1;
}
}
return false;
}
int main()
{
int x;
cin>>n>>x;
for(int i = 0; i < n; i++) cin>>a[i];
sort(a, a+n); //排序是使用二分法的前提
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
int temp = a[i]*x*x + a[j]*x;
if (find(-temp)) {
cout<<"YES";
return 0;
}
}
}
cout<<"NO";
return 0;
}
结果