第一次写博客,先放一道洛谷比较简单(个人觉得)的题目

 //貌似只有随笔能被看到,那就删掉文章发随笔了

题目链接

https://www.luogu.org/problemnew/show/P5269

题目解析

。。。没啥好解析的,看懂题目就vans辣

解题思路

纯模拟题目,题里给的也比较清晰,尤其是用例非常全面QAQ~极其符合本辣鸡的口味

说几点注意的地方:

1.初值注意,档位是1,转速是L,这个在合法性判断上也有作用(上学期算法课彻底根治了我不设初值的嘬屎习惯)

2.档位的合法性判断要放在最前面,先合法才能跑

3.连续K秒R转速,这个初值要设成0,因为他是第K秒跑完才停,不要忘记加上这秒的路程

4.我个人当时犯的一个错误是我认为踩油门加速是暂时的(科三不及格!(误)),下一秒速度会降到之前未踩油门时的速度,我还多加了个变量来记录上一秒没加油门的转速,后来发现用例给的速度是完全继承上一秒的速度,然后就ok了

参考代码

//author:Flying Rabbit King
#define _CRT_SECURE_NO_DEPRECATE #include <cstdio> #include <cstring> #include <vector> #include <iostream> #include <algorithm> #define inf 0x3f3f3f3f using namespace std; long long a[1000005]; long long b[1000005]; int main() { long long N, T, L, R, X, K; long long d=1,sum=0,s=0,num=0; bool judge = true; scanf("%lld%lld%lld%lld%lld%lld",&T, &N, &L, &R, &X, &K); for (int i = 0; i < T; i++) { scanf("%lld",&a[i]); scanf("%lld",&b[i]); } s = L; for (int i = 0; i < T; i++) { if (a[i] == 0) { d += 1; s = L; } else if (a[i] == 1) { d -= 1; s = R; } if (d<1 || d>N) { judge = false; break; } if (b[i] == 1) { s = min(R, s + X); } sum += s * d; if (s == R) { num++; } else { num = 0; } if (num == K) { break; } } if (judge == true) { printf("%lld", sum); } else { printf("-1"); } system("pause"); return 0; }