hdu4811-Ball(2013ACM/ICPC亚洲区南京站现场赛)

思路:
分情况讨论:
m i n ( R , Y , B ) > 1 min(R ,Y ,B)>1 min(R,Y,B)>1,一种结果,然后考虑, ( R , Y , B ) (R,Y,B) (R,Y,B)只有一个为 1 1 1, ( R , Y , B ) (R,Y,B) (R,Y,B)只有两个为 1 1 1, ( R , Y , B ) (R,Y,B) (R,Y,B)三个都为 1 1 1,然后考虑, ( R , Y , B ) (R,Y,B) (R,Y,B)只有一个为 0 0 0的情况,两个为 0 0 0的情况,全都为 0 0 0的情况。

恶心的模拟:

参考代码:

/*
 * @Author: vain
 * @Date: 2020-08-26 11:58:46
 * @LastEditTime: 2020-09-12 20:06:24
 * @LastEditors: sueRimn
 * @Description: In User Settings Edit
 * @FilePath: \main\demo.cpp
 */
#include <bits/stdc++.h>
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <vector>
#include <map>
#include <queue>
#include <set>
#include <ctime>
#include <cstring>
#include <cstdlib>
#include <math.h>
#include <bitset>
using namespace std;
typedef long long ll;
#define ll long long
typedef unsigned long long ull;
const int N = 1e3 + 20;
const ll maxn = 5e5 + 20;
const ll mod = 998244353;
ll head[maxn], stac[maxn];
int a[maxn], b[maxn], c[maxn], vis[maxn];
// typedef pair<ll, ll> p;
// priority_queue<p, vector<p>, greater<p> > m;
// ll sum[maxn];
int max(int a, int b) {
    
     return a > b ? a : b; }
ll min(ll a, ll b) {
    
     return a < b ? a : b; }
ll gcd(ll a, ll b) {
    
     return b ? gcd(b, a % b) : a; }
ll lcm(ll a, ll b) {
    
     return a * b / gcd(a, b); }
void swap(ll &x, ll &y) {
    
     x ^= y, y ^= x, x ^= y; }
map<string, ll> pll, che, mp;
int ik[N], q[N], cnt;
int lowbit(int x) {
    
     return (x) & (-x); }
vector<int> fc[maxn];
// ull h[maxn], p[maxn];
const ull base = 13331;
char s1[maxn];
ll ksm(ll a, ll b, ll mod)
{
    
    
    ll res = 1;
    while (b)
    {
    
    
        if (b & 1)
            res = (a * res) % mod;
        b >>= 1;
        a = a * a % mod;
    }
    return res;
}
struct node
{
    
    
    ll a, b, w;
} p[maxn];
bool cmp(node x, node y)
{
    
    
    return x.w > y.w;
}
int main()
{
    
    
    ios::sync_with_stdio(false);
    cin.tie(0), cout.tie(0);
    srand(time(NULL));
    ll t, n, m;
    ll r, y, x, b;
    while (cin >> r >> y >> b)
    {
    
    
        x = r + y + b;
        if (min(b, min(r, y)) >= 2)
        {
    
    
            cout << 15 + max(0ll, x - 6) * 6 << endl;
        }
        else
        {
    
    
            ll a;
            a = 0;
            if (r && b && y)
            {
    
    
                if (r == 1)
                    a++;
                if (y == 1)
                    a++;
                if (b == 1)
                    a++;
                if (a == 1)
                {
    
    
                    ll sum = 10ll + max(0ll, x - 5) * 5ll;
                    cout << sum << endl;
                }
                if (a == 2)
                {
    
    
                    ll sum = 6ll + max(0ll, x - 4) * 4;
                    cout << sum << endl;
                }
                if (a == 3)
                {
    
    
                    cout << 3ll << endl;
                }
            }
            else
            {
    
    
                if (r == 0)
                    a++;
                if (y == 0)
                    a++;
                if (b == 0)
                    a++;
                if (a == 1)
                {
    
    
                    ll k = x - 2;
                    if (k == 1)
                        cout << 3 << endl;
                    else if (k <= 0)
                        cout << 1 << endl;
                    else if (k <= 2||r==1||y==1||b==1)
                    {
    
    
                        cout << (3ll + (k - 1ll) * 3ll) << endl;
                    }
                    else
                    {
    
    
                        ll sum = 6ll + (k - 2ll) * 4ll;
                        cout << sum << endl;
                    }
                }
                if (a == 2)
                {
    
    
                    ll sum = (1ll + max(0ll, x - 2ll) * 2ll);
                    if (x != 1ll)
                        cout << sum << endl;
                    else
                    {
    
    
                        cout << 0ll << endl;
                    }
                }
                if (a == 3ll)
                {
    
    
                    cout << 0ll << endl;
                }
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/yangzijiangac/article/details/108554261
今日推荐