1. 程式人生 > >C. New Year and Rating 差分方程 思維

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

-i c++ span hang its efi return 技術分享 bsp

題意: 一個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

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