51nod 1267 4個數和為0 雜湊 二分

2021-07-15 20:18:25 字數 1080 閱讀 3913

給出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思路:

就是把每個數兩兩組合,求和,然後二分找兩個和為0(並且四個數不相等的情況)。sum=a+b 這個可以叫做雜湊函式吧。

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define mod 1000000007

#define pi acos(-1.0)

#define inf 0x3f3f3f3f

typedef

long

long ll;

const

int maxn=1005;

int a[maxn];

int n,ok;

struct nodep[maxn*maxn];

bool cmp(node a,node b)

return -1;

}int main()

}sort(p,p+cnt,cmp);

int ok=0;

for(int i=0;iint j=bifind(i+1,cnt-1,-p[i].sum);

if(j!=-1)}}

if(ok)printf("yes\n");

else

printf("no\n");

return

0;}

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...