给出n个整数和x,请问这n个整数中是否存在三个数a,b,c使得ax2+bx+c=0,数字可以重复使用。
  1. 二分法的中的while等号问题:一定要有等号(不然就是侥幸在样本中过关);
  2. break跳出循环多的时候可以选择直接return 0;结束函数(main()也是);
  3. if(a[mid]>N) h=mid-1;            //难点记忆
    else if(a[mid]<N) l=mid+1;
    记忆:mid大于 h-1,mid小于 l+1;high & low;
#include<iostream>
#include<cmath>
#include<algorithm>
#include<string>
using namespace std;

int n,x,flag=0,l,h;
int a[2010];

int findC(int N)
{
int mid;
l=0;h=n-1;
while(l<=h)
{
mid=(l+h)/2;
if(a[mid]>N) h=mid-1;            //难点记忆
else if(a[mid]<N) l=mid+1;
else return 1;
}
return 0;
}
int main(){
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 c=a[i]*pow(x,2)+a[j]*x;
if(findC(-c)){
flag=1;                //无break
}
if(flag==1){
puts("YES");
return 0;               //return 0结束,并且这个if是在第二个循环内判断的,得结果速度应该会更快,但多次运行后发现会导致内存占用更大
}
}
}
if(flag==0)
puts("NO");
return 0;
}