CF-1221C Perfect Team 题解

题目大意

每个队伍有三种人,c,m,x,其中x可以被c和m替换掉,输入c,m,x的数量,请问最多可以组成多少个队伍。

解题思路

(其实我只想到的贪心的思路,TLE了。。

这里说一下吧。

首先优先使用c,m,x,直到其中有一个为0的时候结束。如果c或者m为0,则无法继续。

如果x为0,则可以使用c或者m代替x,用数量多的来代替,使c,m趋向相同。

思路大概就是这样,但是超时了。。

(不甘心啊啊

看了看别人大佬的思路。。

最大团队数为$min(c,m)$,此外,构成团队还需要3个人,所以还要和$(c+m+x)/3$取$min$。

这个还能推广到n个人的队伍。

$min(min(c,m),(c+m+x)/3)$

我的思路是,先用完x之后,剩下的就是$(c+m)/3$了,加上即可。

(其实是一样的。。这个除以3就是取平均的意思

完整代码

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
#include <iostream>
#include <algorithm>
using namespace std;

int main() {
int t;
cin >> t;
while (t--) {
int a, b, c;
int ans = 0;
cin >> a >> b >> c;
int m = min(a, b);
m = min(m, c);
a -= m, b -= m, c -= m, ans += m;
if (!a || !b) {
cout << ans << endl;
continue;
}
else {
if (a >= 2 * b) ans += b;
else if (b >= 2 * a) ans += a;
else ans += (a + b) / 3;
cout << ans << endl;
}
}
}
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • © 2015-2021 sakurakarma
  • Powered by Hexo Theme Ayer
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信