Codechef - Maximize Colours(IQ)
题目大意
有红绿蓝三种颜色,三种颜色当中任意两个颜色混合都可以产生出一个新的颜色(然而混合产生的颜色不能与任何其它的颜色进行混合)。输入三个整数,分别代表红色,绿色,蓝色的颜色个数(每次混合各消耗一个颜色数目),求出能获得的最大颜色数量。
思路
举几个样例找找规律。比如说(1,1,0),原本有两种颜色 ,如果混合后就只剩下一种颜色;还有(1,2,0)这种情况,混合后还是两种颜色,数目没有发生变化。所以想法是不和数目为1的颜色混合(因为混合后数目不变,甚至可能减少)。注意要降序排序,结合代码理解这两个的区别(5,2,2)和(2,2,5)。
代码
void solve() {
int res = 0;
for (int i = 0; i < 3; ++i) cin >> a[i];
sort(a, a + 3, greater<int>());
if (a[0] > 1 && a[1] > 1) {
++res;
--a[0], --a[1];
}
if (a[1] > 1 && a[2] > 1) {
++res;
--a[2], --a[1];
}
if (a[2] > 1 && a[0] > 1) {
++res;
--a[2], --a[0];
}
for (int i = 0; i < 3; ++i) {
if (a[i]) ++res;
}
cout << res << endl;
}