我是靠谱客的博主 冷艳小丸子,最近开发中收集的这篇文章主要介绍http://codeforces.com/problemset/problem/478/C,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
3种颜色涂桌子,要用到3种颜色,且3种的数量有限,不能只涂一种颜色,求最多能涂的数量。
可以确定的是上界为(a + b + c) / 3。
由题意,能涂的方式只有2种:1,1,1。2,1,0。
而3,0,0这种方式是不被允许的,那么我们就应该尽量避免发生这样的情况。而发生这样的情况的状态是只有1种颜色由剩余,其他两种都已用完,于是很容易想到把最开始数量较多的颜色和数量较少的颜色按照第二种方法去涂色。
在之前做的cf某个贪心题中和这个是类似的,只是相当于这个题的两个颜色的情况去涂尽量多的桌子,而只有两种颜色就好办了,也就是把这两种颜色的数量不断进行靠近,而后循环的按1,2,1,2的方法去涂即可。
此题按2种推广到3种则也是要把两种颜色的数量进行靠近,而实际上呢,当只存在2种时,如果a <= 2 * b,则必定能够去涂完这两种颜色也就是说为(a + b) / 3,否则的话,必定涂不了这么多,只能涂b个。
#include <iostream>
#include <cstdio>
#include <list>
#include <stack>
#include <queue>
#include <cstdlib>
#include <set>
#include <map>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
using namespace std;
#define INF 0x3f3f3f3f
#define ll long long
ll a, b, c;
int main()
{
while (cin >> a >> b >> c) {
if (a < b) {
swap(a, b);
}
if (a < c) {
swap(a, c);
}
if (b < c) {
swap(b, c);
}
ll ans = 0, t = a - b;
if (t > 2 * c && (a - 2 * c) > 2 * b) {
ans = b + c;
}
else {
ans = (a + b + c) / 3;
}
cout << ans << endl;
}
return 0;
}
最后
以上就是冷艳小丸子为你收集整理的http://codeforces.com/problemset/problem/478/C的全部内容,希望文章能够帮你解决http://codeforces.com/problemset/problem/478/C所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复