4个数和为0
第2 - N + 1行:A i i(-10^9 <= A i i <= 10^9)
5 -1 1 -5 2 4
Yes
如果单纯的用暴力的话会超时,应该用上二分,这样才不会爆。
代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main() { int a[10000]; int n,m,i,j,k,high,low; scanf("%d",&n); for(i=0; i<n; i++) { scanf("%d",&a[i]); } sort(a,a+n); int f=0; for(i=0; i<n-4; i++) { for(j=i+1; j<n-2; j++) { if(f==1) break; high=j+1; low=n-1; while(high<low) { int t=a[i]+a[j]+a[high]+a[low]; if(t==0) { f=1;//找到了4个数就结束 break; } if(t>0) { low--; } if(t<0) { high++; } } if(f==1) break; } } if(f==1) { printf("Yes\n"); } else { printf("No\n"); } return 0; }