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

时间:2023-03-08 20:19:29

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

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

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

 #include <bits/stdc++.h>

 const int inf=0x3f3f3f3f;
#define int long long
using namespace std;
const int maxn=2e5+;
int c[maxn],d[maxn];
int32_t main(){
int n;
scanf("%lld",&n);
for(int i=;i<=n;i++){
scanf("%lld%lld",&c[i],&d[i]);
} int xiajie=-inf,shangjie=inf;
long long sum=;
for(int i=;i<=n;i++){
if(d[i]==){
xiajie=max(1ll*xiajie,-sum);
}
if(d[i]==){
shangjie=min(-sum,1ll*shangjie);
}
// cout<<i<<" "<<shangjie<<" "<<xiajie<<" "<<sum<<endl;
sum+=c[i];
} if(xiajie>shangjie)printf("Impossible\n");
else if(shangjie==inf){
printf("Infinity\n");
}
else {
printf("%lld\n",shangjie+sum);
} return ;
}