$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 ;
}

猜你喜欢

转载自www.cnblogs.com/qf-breeze/p/10587300.html