zoukankan      html  css  js  c++  java
  • 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;
    }
     
  • 相关阅读:
    uva 10129 poj 1386 hdu 1116 zoj 2016 play on words
    redis持久化
    Redis事务
    非阻塞I/O多路复用机制
    SFTP
    FTP
    http协议特点及session共享及单点登录
    什么是cookie以及cookie的特性、优缺点
    异步IO和同步IO的区别:
    TCP操作与原理
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12069112.html
Copyright © 2011-2022 走看看