• zzulioj 2618: ACMICPC亚洲区域赛ZZULI站


    题目链接;

    http://acm.zzuli.edu.cn/problem.php?id=2618

       这个题主要是考验细心和英语的读题能力,大概意思是你有三种颜色的球r,y,b个,每在一排球的末尾放一个球,加的分数相当于这个球前面球的种类数,
    每在一排球的中间插入一个球,加的分数相当于这个球前面的球的种类数加上这个球后面球的种类数,显然,我们尽量往中间插入球的得到的收益是比
    较高的,然后就是分析各种情况了,举个例子,比如有3种颜色的球且都大于2个,那么我们可以先放三个不同颜色的球,再放3个不同颜色的球,那我
    们每在他们中间插入一个球,那么分数就会加6,其他情况类似就不多赘述了,直接看代码吧!

    #include<set>
    #include<map>
    #include<stack>
    #include<queue>
    #include<cmath>
    #include<cstdio>
    #include<cctype>
    #include<string>
    #include<vector>
    #include<climits>
    #include<cstring>
    #include<cstdlib>
    #include<iostream>
    #include<algorithm>
    #define max(a, b) (a > b ? a : b)
    #define min(a, b) (a < b ? a : b)
    #define mst(a) memset(a, 0, sizeof(a))
    #define _task printf("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n")
    using namespace std;
    typedef long long ll;
    typedef pair<int, int> P;
    const double eps = 1e-7;
    const int INF = 0x3f3f3f3f;
    const ll ll_INF = 233333333333333;
    const int maxn = 1e3+10;
    int main(void) {
        int t;
        scanf("%d", &t);
        while(t--) {
            ll r, y, b;
            scanf("%lld%lld%lld", &r, &y, &b);
            ll temp = min(r, min(y, b));
            ll res;
            if (temp>=2)    //三种球都大于1
                res = 15 + (r+y+b-6)*6;
            else if (temp>=1) { 
                if ((r>1&&y>1) || (r>1&&b>1) || (y>1&&b>1)) //两种球大于1一种球小于1
                    res = 10 + (r+y+b-5)*5;
                else if (r > 1 || y > 1 || b > 1) //两种球等于1一种球大于1
                    res = 6 + (r+y+b-4)*4;
                else    //三种球都等于1
                    res = 3;
            }
            else if ((!r && y>0 && b>0) || (!y && r>0 && b>0) || (!b && y>0 && r>0)) { 
                if ((r>1&&y>1) || (r>1&&b>1) || (y>1&&b>1)) //一种球等于0另外两种大于1
                    res = 6 + (r+y+b-4)*4;
                else if (r > 1 || b > 1 || y > 1) //一种球等于0另外一种等于1一种大于1
                    res = 3 + (y+r+b-3)*3;
                else    //一种球等于0,另外两种大于1
                    res = 1;
            }
            else if (r>1 || y>1 || b>1) //只有一种球且大于1
                res = 1 + (y+r+b-2)*2;
            else // 只有一种球且等于1或者全都是0
                res = 0;
            printf("%lld\n", res);
        }
        return 0;
    }
     
  • 相关阅读:
    【原】Spark on YARN
    【原】Spark Standalone模式
    【原】日志处理-Spark
    怎样从官网下载Spring的jar包
    成功安装mysql(mysql-5.5.32-winx64.msi)后,为何服务管理器里找不到MYSQL服务名?
    SQL如何取得一个面的中心点
    Kindle2018 一周使用报告
    迅雷导致文件损坏
    苹果中国官网全面更新,官翻产品不容错过!
    如何选择windows 10 系统中默认打开程序
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12069112.html
Copyright © 2020-2023  润新知