C. New Year and Rating 差分方程 思维

题意: 一个CF玩家打CF 给出其比赛列表和上分(掉分)情况 ,但是没给初始分 问最后最高分是多少  (情况不存在,或者可能无穷大)

思路: 设初始分为x 那么之前的回合的分数前缀和为sum    如果当前为div2  则有 x+sum<=1899   如果为div1 x+sum>=1900  求出上下界 

答案为  x(上界)+ 最后的sum    如果下界大于上界则不存在  如果上界无穷则 分数可以无穷大

 1 #include <bits/stdc++.h>
 2 
 3 const int inf=0x3f3f3f3f;
 4 #define int long long
 5 using namespace std;
 6 const int maxn=2e5+10;
 7 int c[maxn],d[maxn];
 8 int32_t main(){
 9     int n;
10     scanf("%lld",&n);
11     for(int i=1;i<=n;i++){
12         scanf("%lld%lld",&c[i],&d[i]);
13     }
14 
15         int xiajie=-inf,shangjie=inf;
16         long long sum=0;
17         for(int i=1;i<=n;i++){
18             if(d[i]==1){    
19                 xiajie=max(1ll*xiajie,1900-sum);
20             }
21             if(d[i]==2){
22                 shangjie=min(1899-sum,1ll*shangjie);
23             }
24         //    cout<<i<<" "<<shangjie<<" "<<xiajie<<" "<<sum<<endl;
25             sum+=c[i];
26         }
27 
28         if(xiajie>shangjie)printf("Impossible\n");
29         else if(shangjie==inf){
30             printf("Infinity\n");
31         }
32         else {
33             printf("%lld\n",shangjie+sum);
34         }
35     
36 
37     return 0;
38 }
View Code

 

posted @ 2019-04-16 22:32  tttttttttrx  阅读(168)  评论(0编辑  收藏  举报