51nod 1267 4個數和為0 暴力 二分

2022-07-31 07:48:10 字數 1256 閱讀 5426

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

暴力+排序+二分

#include #include 

#include

using

namespace

std;

int a[1100

];int

main()

else

if (sum > 0

)

else}}

printf(

"no\n");

return0;

}

還有個很好的思路,先把陣列中任意兩個數存起來,再從小到大排序,類似二分的思想從兩頭開始查詢,是否滿足sum1+sum2==0 並且兩個座標不重疊,每個點只選一次

#include #include 

#include

using

namespace

std;

int a[1100

];struct

node

p[1100*1100

];int

cmp(node a, node b)

intmain()

sort(p, p+k, cmp);

int l = 0, r = k-1

;

int flag = 0

;

while (l else

if (p[l].sum+p[r].sum < 0

) l++;

else r--;

}if (flag) printf("

yes\n");

else printf("

no\n

");

return0;

}

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