J - Ball 2013ACM/ICPC亚洲区南京站现场赛 (模拟;找规律)

31 篇文章 0 订阅
11 篇文章 0 订阅
  • 题目链接:https://vjudge.net/contest/231845#problem/J
  • 题意:给你三个整数,分别表示三种颜色的球的个数,把球一个一个放到桌子上
    • 当放第一个球时,获得0点
    • 当把球放到已经放的球的端点时,得到已经放的球的颜色种数的点数
    • 当把球放到两个球之间时,获得左边球颜色种数+右边球颜色种数
  • 算法:模拟;找规律
  • 思路:手动模拟得每次放球所得点数将从0以1为差,递增到 limit1=(R>2?2:1)+(Y>2?2:1)+(B>2?2:1),设 limit2 = (R + Y + B),则 (limit2 - limit1)即 limit1中减少的个数 为最大值的个数。

#include <bits/stdc++.h>
#define pi acos(-1)
#define fastcin ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
using namespace std;
typedef long long LL;
typedef pair<int, int> P;
const int INF = 0x3f3f3f3f;
const LL ll_INF = 0x3f3f3f3f3f3f3f3f;//4e18 ~= 2^62
const int maxn =10000 + 10;
const LL mod = 1e9+7;


LL a[5];

int main()
{
    while(cin >> a[0] >> a[1] >> a[2])
    {
        LL l1=0, l2=0;
        LL ans=0;
        for(int i=0; i<3; i++){
            l2 += a[i];
            l1 += a[i]>2?2:a[i];
        }
        for(LL i=0; i<min(l1, l2); i++){
            ans+=i;
        }
        if(l1<l2) ans+=(l2-l1)*l1;
        cout << ans << endl;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值