题目链接:https://www.nowcoder.com/acm/contest/35/A
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给出n个整数和x,请问这n个整数中是否存在三个数a,b,c使得ax
2+bx+c=0,数字可以重复使用。
输入描述:
第一行两个整数n,x 第二行n个整数a[i]表示可以用的数 1 <= n <= 1000, -1000 <= a[i], x <= 1000
输出描述:
YES表示可以 NO表示不可以
示例1
输入
2 1 1 -2
输出
YES
解析:n为1000,n^3必然超时,由于x已经知道,所以咱们可以枚举a,b,然后求出c,在数组中二分查找c即可
代码:
#include<bits/stdc++.h>
using namespace std;
int a[1009];
int main()
{
int n, x;
scanf("%d%d", &n, &x);
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
sort(a, a+n);
int f = 0;
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
int c = a[i]*x*x+a[j]*x;
int k = *lower_bound(a, a+n, -c);
if(k == -c)
{
f = 1;
break;
}
}
}
if(f) puts("YES");
else puts("NO");
return 0;
}