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;
}

 

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

posted @   ChebyshevTST  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示