HDU 1205(鴿巢原理)

2021-08-04 19:07:02 字數 887 閱讀 6291

hoho,終於從speakless手上贏走了所有的糖果,是gardon吃糖果時有個特殊的癖好,就是不喜歡將一樣的糖果放在一起吃,喜歡先吃一種,下一次吃另一種,這樣;可是gardon不知道是否存在一種吃糖果的順序使得他能把所有糖果都吃完?請你寫個程式幫忙計算一下。 

input

第一行有乙個整數t,接下來t組資料,每組資料佔2行,第一行是乙個整數n(0

output

對於每組資料,輸出一行,包含乙個"yes"或者"no"。 

sample input

2

34 1 1

55 4 3 2 1

sample output

no

yes

please use function scanf

思路顯然當乙個糖果數量很多時,它最容易被相鄰吃到。於是找到數量最多的那種糖果,假設有n種,向其n-1個空隙中插入其他糖果

鴿巢原理可知只要剩下糖果的總數是大於等於n-1的,那麼這個任務就能完成。

因為剩下的糖果是多種的(至少1種),而且每種的數量不會超過n,所以只要能插滿n-1個空隙,剩下的糖果一定可以再插進去並且滿足相鄰不相同。

**示例

//#define local

#include#include#include#includeusing namespace std;

const int maxn=1000010;

typedef long long ll;

int arr[maxn];

int main()

if((sum-arr[max])>=arr[max]-1) cout<<"yes"<

hdu 1205 鴿巢原理

運用鴿巢原理,假設最多的糖果有 個,那麼必須要有max 1個其他種類的糖果才能吃完,如果其他種類的糖果多於max 1個,那麼至少要有乙個種糖果存在max 1個,才會出現當前狀態無解,而這種狀況下又與最多糖果數為max矛盾,所以要滿足有解的充要條件是max 1 sum max include incl...

hdu 1205 吃糖果(鴿巢原理)

鴿巢原理 1.把某種糖果看做隔板,如果某種糖果有n個,那麼就有n 1塊區域,至少需要n 1塊其他種糖果才能使得所有隔板不挨在一塊.也就是說能吃完這種糖果.至少需要其他種類糖果n 1塊.鴿巢原理 2.數量最多的糖果 隔板 可以構造最多的空間,如果這種糖果有maxn個.那麼需要maxn 1個其他種糖果....

hdu1205吃糖果 鴿巢原理

鴿巢原理 25只鴿子飛進了24個鴿巢,則至少有乙個鴿巢有兩個鴿子。這道題就是找出數量最大的那堆糖果,然後判斷sum max 代表總量 最大堆數量,也就是剩餘糖果的數量 是否大於 max 1,如果大於的話,代表可以吃完.因為數量為max的糖果有max 1 個空,其他種類小於max 1的糖果,可以插在m...