$P5269 欧稳欧再次学车$
Posted qf-breeze
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了$P5269 欧稳欧再次学车$相关的知识,希望对你有一定的参考价值。
(problem)
哇 看各位巨佬都来发(T1)的题解 我也来发一篇。(
别的题目不会别瞎bb)
题目大意就是
(T) 秒 能走多少路程
第一行六个整数 (T,N,L,R,X,K)
接下来 (T) 行,每行两个整数 (x,y) 表示这一秒的操作。
我们设档为(D),转速为(V)
首先 (D = 1) ,(V = L) 。
(x == 1) (D++),(V=L)
(x == 2) (D--),(V=R)
(y == 0) (V+=X)
(V > R) 则 (V=R)(即(V=min(V+X,R)))
连续(K)秒 (V=R) 则停止。
得出
if(V == R) cnt ++ ;
if(V != R) cnt = 0 ;
if(cnt == K) break ;
特别注意的一点 是 特判(-1)
即
if(D == N+1 or D == 0) return printf("-1"),0;
完整代码如下。
//完整代码
#include <bits/stdc++.h>
using namespace std;
typedef long long LL ;
inline LL In() { LL res(0),f(1); register char c ;
while(isspace(c=getchar())) ; c == '-'? f = -1 , c = getchar() : 0 ;
while(res = (res << 1) + (res << 3) + (c & 15) , isdigit(c=getchar())) ;
return res * f ;
}
LL T , N , L , R , X , K ;
LL D , V ;
signed main () {
T = In() ; N = In() ; L = In() ; R = In() ; X = In() ; K = In() ;
D = 1 , V = L ;
LL ans = 0 ;
LL cnt = 0 ;
for(register int i = 1 ; i <= T ; i++) {
int x , y ;
x = In() , y = In() ;
if(x == 0) D ++ , V = L ;
if(x == 1) D -- , V = R ;
if(D == N+1 or D == 0) return printf("-1"),0;
if(y) V = V+X>R?R:V+X;
if(V == R) cnt ++ ;
if(V != R) cnt = 0 ;
ans += D * V ;
if(cnt == K) break ;
}
cout << ans ;
return 0 ;
}
以上是关于$P5269 欧稳欧再次学车$的主要内容,如果未能解决你的问题,请参考以下文章