题意: 一个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 ;
}