您的位置:首页 > 其它

CodeForces - 750C(思维)

2017-08-24 09:43 405 查看
题目链接:


题意:Codeforces里分两个等级,分数在1900及其以上是dev1,在1899及其以下是dev2,分数可以是负的。给出最近几场比赛的数据,求可能的最大分数。给出n对数据c和d。d是指在在参加这场比赛之前的等级,c是指这场比赛结束后变化的分数。

题解:经过思考过后你会发现,最后一个c是无所谓的,因为它没给出变化后的等级。所以我们将数据错一分开,如:

c  d     这样以后数据就成了给出这场比赛结束后的分数变化和等级。

   1     例中的就是先给出当前等级1,一场比赛结束后负了7分,等级变成了2。

-7  2     维护已经出现的数据的最小值和最大值,等级1有最小可能1900,等级2有最大可能1899。记录总分

5  5     数变化,只管当前数据的最值。只要比赛结束后是等级1,则比赛前最小分数就是1900 - c。只要比

8       
赛结束后是等级2,则比赛前最小分数就是1899 - c。最后通过最值的关系得出结果。

#include <bits/stdc++.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int main()
{
int n, c, d, cut = 0, mins = -INF, maxs = INF;
scanf("%d", &n);
while(n--){
scanf("%d%d", &c, &d);
if(d == 1) mins = max(mins, 1900 - cut);    //比赛结束后是dev1,则之前最小值为1900-c
else maxs = min(maxs, 1899 - cut);          //比赛结束后是dev2,则之前最小值为1899-c
cut += c;                                   //将数据错位开了
}

//注意记录的是全过程的最值。
//每次比赛结束后的最值分数要么是1900要么就
97a7
是1899,因为比赛结束后是dev1,最小就是1900,同理1899。
//可我们记录的是当前比赛之前的最值。

if(mins > maxs) puts("Impossible");
else if(maxs == INF) puts("Infinity");
else printf("%d\n", maxs + cut);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: