给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No"。
Input
第1行,1个数N,N为数组的长度(4 <= N <= 1000)
第2 - N + 1行:A[i](-10^9 <= A[i] <= 10^9)
Output
如果可以选出4个数,使得他们的和为0,则输出"Yes",否则输出"No"。
Input示例
5
-1
1
-5
2
4
Output示例
Yes
思路:
二分
第一次是枚举前两个数,后面两个数二分
第二次做法是,先统计出两个不同数的和的数组,然后直接二分

思路一:

 1 #include <iostream>
 2 #include <algorithm>
 3 using namespace std;
 4 typedef long long ll;
 5 ll ans[1005];
 6 int main() {
 7     ios::sync_with_stdio(false);
 8     int n,flag=0;
 9     cin>>n;
10     for(int i=0;i<n;++i) cin>>ans[i];
11     sort(ans,ans+n);
12     for(int i=0;i<n;++i) {
13         if(ans[i]>=0) break;
14         for(int j=i+1;j<n;++j) {
15             int l=j+1,r=n-1;
16             while(j<r) {
17                 ll temp=ans[i]+ans[j]+ans[l]+ans[r];
18                 if(temp>0) r--;
19                 else if(temp<0) l++;
20                 else {
21                     flag=1;
22                     cout<<"Yes"<<endl;
23                     return 0;
24                 }
25             }
26         }
27     }
28     if(!flag) cout<<"No"<<endl;
29     return 0;
30 }
View Code

相关文章:

  • 2021-06-07
  • 2021-05-22
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-09
  • 2021-08-14
猜你喜欢
  • 2022-12-23
  • 2021-07-01
  • 2022-12-23
  • 2022-12-23
  • 2022-01-20
相关资源
相似解决方案