4個數和為0 51Nod 1267

2021-08-25 17:33:23 字數 1020 閱讀 1818

給出n個整數,你來判斷一下是否能夠選出4個數,他們的和為0,可以則輸出"yes",否則輸出"no"。

input

第1行,1個數n,n為陣列的長度(4 <= n <= 1000) 

第2 - n + 1行:aii(-10^9 <= aii <= 10^9)

output

如果可以選出4個數,使得他們的和為0,則輸出"yes",否則輸出"no"。

sample input

5-11

-524

sample output

yes
解題思路:二分思想,但是四個數只有乙個可以二分,所以就要把4個數變成兩個,把任意兩個數結合,存上兩個數的下標,然後就變成2個數匹配兩個數,就可以用二分,需要解決的就是不能讓這四個數一樣

#include #include #include #include using namespace std;

struct node

b[1000009];

int a[1009],num;

int erfen(int i,long long int x,int l,int r)

l--;

}while(b[r].sum==x&&r<=num)

r++;

}if(flag)

return 1;

else return 0;

}else if(b[mid].sumelse

}return 0;

}int cmp(node x,node y)

int main()

num=0;

for(i=1; i<=n; i++)

}sort(b+1,b+1+num,cmp);

int flag=0;

for(i=1; i<=num; i++)

}if(flag) printf("yes\n");

else printf("no\n");

return 0;

}

3個數和為0 51Nod 1090

給出乙個長度為n的無序陣列,陣列中的元素為整數,有正有負包括0,並互不相等。從中找出所有和 0的3個數的組合。如果沒有這樣的組合,輸出no solution。如果有多個,按照3個數中最小的數從小到大排序,如果最小的數相等則按照第二小的數排序。input 第1行,1個數n,n為陣列的長度 0 n 10...

51nod1267 四個數和為0

先得到任意兩個數的和,從小到大排序,從兩邊向中間掃一遍就行了 include include using namespace std typedef long long ll int a 1005 struct nodesum 1005 1005 bool cmp struct node a,str...

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