Codeforces-Goodbye2016-C

题目链接

题目大意:每个codeforces的user都有个分数,分为两个等级,第一等级是>=1900,第二个等级是<1900。给出每次比赛前的等级和比赛后所提升或下降的分数,让你输出最后的分数,不可能输出impossible。可以是正无穷的话Infinity,否则输出可能的最大分数。

参考博客
真的很佩服写这个博客的人,思维很强。我模拟啊枚举啊弄了半天,分情况分的自己都有点分不清了,还不能AC。但别人思考过后,很容易就能过。

题解:建立两个边界(一个上边界,一个下边界),从第一条开始模拟,根据条件缩小边界,到最后如果最大边界不确定就是正无穷,左边界大于有边界就是不可能,否则输出边界中的最大值。
自己体会一下,有点不好解释。codeforces里面可以看到样例,找几个特殊和一般的模拟一下就会有点感觉了。

#include <bits/stdc++.h> //包含所有头文件,codeforces支持,hdu有的题目支持,poj不支持
using namespace std;

const int INF = 0x3f3f3f3f; //这个数不错,既能保证接近一般数据里的无穷,也能保证经过一些运算后不爆int

int main()
{
    int n,l,r,a,b,ans;
    while(~scanf("%d",&n))
    {
        l=-INF,r=INF;
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&a,&b);
            if(b==1&&l<1900) l=1900; //此时位于1等级,其结果下界必定不小于1900,更新下界
            if(b==2&&r>1899) r=1899; //此时位于2等级,其结果上界必定不大于1899,更新上界
            l+=a;
            r+=a;
        }
        ans = max(l,r);
        if(r<l) printf("Impossible\n");
        else if(ans>20001899) printf("Infinity\n");//20001899是数据所能达到的最大值,自己想一想,很容易
        else printf("%d\n",ans);
    }
    return 0;
}

没想到这题思维过后这么简单,之前写了很长一串,很佩服原博主能想出来这种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值