HDU-1205 喫糖果(蜂巢原理)

喫糖果

Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 53764 Accepted Submission(s): 15320

Problem Description

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

Input

第一行有一個整數T,接下來T組數據,每組數據佔2行,第一行是一個整數N(0<N<=1000000),第二行是N個數,表示N種糖果的數目Mi(0<Mi<=1000000)。

Output

對於每組數據,輸出一行,包含一個"Yes"或者"No"。

Sample Input

2
3
4 1 1
5
5 4 3 2 1

Sample Output

No
Yes

Hint

Please use function scanf

Source

Gardon-DYGG Contest 2

題目鏈接:

http://acm.hdu.edu.cn/showproblem.php?pid=1205

思路:

鴿巢原理(抽屜原理)

基本描述

桌子上有是個蘋果,把這十個蘋果放到九個抽屜裏,無論怎麼放,我們會發現至少會有一個抽屜裏面至少放兩個蘋果。這一現象就是所說的“抽屜原理”。
更一般的表述:如果每一個抽屜代表一個集合,每一個蘋果就可以代表一個元素。加入有n+1個元素放到n個集合中去,其中必定有一個集合裏至少有兩個元素。

第一抽屜原理

原理1

把多餘n+1個物體放到n個抽屜裏,則至少有一個抽屜裏的東西不少於兩件。

原理2

把多餘mn+1(n不爲0)個物體放到n個抽屜裏面,則至少有一個抽屜裏面不少於(m+1)的物體。

第二抽屜原理

把(mn -1 )個物體放入n個抽屜中,其中必須有一個抽屜不多餘(m-1)個物體。
如將3*5-1 = 14個物體放入5個抽屜中,則必定有一個抽屜中的物體數目少於等於3-1=2.

舉例

1、屬相問題

屬相有12個,那麼任意37個人中,至少有幾個人屬相相同?

上取整(37 / 12) = 4

2、招聘問題

有300人到招聘會求職,其中軟件設計有100人,市場營銷有80人,財務管理有70人,人力資源管理有50人。那麼至少有多少人找到工作才能保證一定有70人找的工作專業相同?

考慮最差情況,即軟件設計,市場營銷,財務管理均招了69人,人力資源管理招了50人,此時再多招1人,就有70人找的工作專業相同了。
故答案爲 69*3 + 50 + 1 = 258

3、襯衫問題

一個抽屜裏有20件襯衫,其中4件是藍的,7件是灰的,9件是紅的,則應從中隨意取出多少件才能保證有5件是同顏色的?

考慮最差情況,即已經取出了4件藍色,4件灰色,4件紅色,再多取出1件就滿足條件。
故答案爲 4 + 4 + 4 + 1 = 13

這道題用鴿巢原理來做

1、我們可以讓最多的糖果看作隔板,假設有n個糖果,那麼有n+1個空間,如果滿足題目要求,那麼至少需要n-1個其他種類的糖果,分別插入隔板,才能滿足要求。(鴿巢原理)

所以比較sum-max和n-1即可

如果sum - max < n-1 輸出“No”

​ sum - max >= n-1 輸出“Yes”

代碼:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
int a[maxn];
int main()
{
    int t;
    cin >> t;
    while(t--) {
        int n;
        cin >> n;
        long long sum = 0;
        int maxx = -1;
        for(int i = 0; i < n; i++) {
            cin >> a[i];
            sum += a[i];
            maxx = max(maxx, a[i]);
        }
        if(sum - maxx < maxx - 1)
            cout << "No" << endl;
        else
            cout << "Yes" << endl;

    }

    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章