HDU-1205 吃糖果 题解

题目大意

有n种糖果,每种糖果有mi个,每次可以吃一颗,但是每次需要吃不同种类的糖果,问你是否能够吃完所有的糖果。

解题思路

补题ing。。

(这个题目卡了我好久啊。。感觉自己不太聪明。思维过于僵化了。

我们可以用最大数量的糖果为墙,中间有n-1个缝隙,只要除了最大数量的糖果以外的糖果的数量大于等于n-1即可保证不会有相同种类的糖果相邻。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <functional>
#include <cstring>
#include <algorithm>
#include <cstdio>
using namespace std;

const int N = 1e6 + 5;
long long num[N];

int main() {
int t;
scanf("%d", &t);
while (t--) {
int n;
long long sum = 0, m = -1e9;
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
scanf("%lld", &num[i]);
sum += num[i];
m = max(m, num[i]);
}
sum = sum - m;
if (sum >= m-1) cout << "Yes" << endl;
else cout << "No" << endl;
}
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2015-2021 sakurakarma
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信