hdu 1205 吃糖果(鸽巢原理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205

题意

Gardon 有 $n$ 种糖果,每种数量已知,Gardon 不喜欢连续两次吃同样的糖果,问是否有可行的方案。

题解

假如数量最多的一种糖果有 $N$ 个,把它们视为 $N$ 个隔板,如果其余糖果的数量少于 $N - 1$,则至少有两个隔板间没有糖果。否则,依次将每种糖果放入 $N$ 个隔板形成的 $N + 1$ 个空间即可。

代码

#include <bits/stdc++.h>
using ll = long long;
using namespace std;

void solve() {
    int n; cin >> n;
    int mx = 0;
    ll sum = 0;
    for (int i = 0; i < n; i++) {
        int x; cin >> x;
        sum += x;
        mx = max(mx, x);
    }
    sum -= mx;
    cout << (sum < mx - 1 ? "No" : "Yes") << "\n";
}

int main() {
    int t; cin >> t;
    while (t--) solve();
}

 

posted @ 2020-06-06 23:45  Kanoon  阅读(149)  评论(0)    收藏  举报