51Nod 1267 4個數和為0

2021-08-20 09:34:18 字數 1006 閱讀 1415

給出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-11

-524

output示例

yes

找四個數的和為0,也可以想成是找兩個數的和為0,這兩個數再分成兩個數,就是四個數了.

那麼把輸入的值任意兩個加起來存在結構體裡,因為四個數都不能相同,所以同時記錄出它們的下標.來判斷它們是不同的四個數

把加起來的數排序,然後列舉+二分即為答案

#include#include#include#include#include#includeusing namespace std;

typedef long long int ll;

const int maxl(1e6);

const int max(0x3f3f3f3f);

int a[maxl+50];

int ans[maxl+50];

struct node

s[maxl+50];

bool cmp(struct node p,struct node q)

}sort(s,s+len,cmp);

for(int i=0;s[i].data<=0;i++)//列舉負數即可

{int x=fabs(s[i].data);

int index=binary_search(i,len-1,x);

if(index==-1)

continue;

if(judge(s[i],s[index])==true)//判斷四個數是否是不同的四個數

{cout<<"yes"<

51nod 1267 4個數和為0

思路 先n 2預處理出所有兩兩的組合,那麼就變成要找a b 0的問題了,那麼排序o n 去找就可以了 includeusing namespace std define ll long long const int maxn 1005 1005 struct node node maxn bool ...

51nod1267 4個數和為0

1267 4個數和為0 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出 yes 否則輸出 no input 第1行,1個數n,n為陣列的長度 4 n 1000 第2 n 1行 a i 10 9...

51 nod 1267 4個數和為0

給出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 sa...