$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 欧稳欧再次学车$的主要内容,如果未能解决你的问题,请参考以下文章

如何防止在背面片段导航上再次设置视图模型

为啥片段恢复后再次调用onLoadFinished?

学车学车笔记

更新:C++ 指针片段

成都学车哪个驾校好?

学车心得