Codechef - Maximize Colours(IQ)

发布时间 2023-08-16 22:12:13作者: ChebyshevTST

题目大意

  有红绿蓝三种颜色,三种颜色当中任意两个颜色混合都可以产生出一个新的颜色(然而混合产生的颜色不能与任何其它的颜色进行混合)。输入三个整数,分别代表红色,绿色,蓝色的颜色个数(每次混合各消耗一个颜色数目),求出能获得的最大颜色数量。

 

思路

  举几个样例找找规律。比如说(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;
}

 

题目链接在这里:Maximize Colours - Problems - CodeChef