\(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 ;
}
原文地址:https://www.cnblogs.com/qf-breeze/p/10587300.html
时间: 2024-11-05 23:24:42