題目詳情
給出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;
}
結果