洛谷 P5269 欧稳欧再次学车 题解
P5269 欧稳欧再次学车
题目背景
请自行脑补一张欧稳欧学车的图
题目描述
欧稳欧学车时经常用一辆橡树车练习。这辆橡树车共有 \(N\) 个挡位,欧稳欧每秒可以把挡位增加或减少 \(1\),初始时(\(0\) 时刻)挡位为 $ 1$。
这辆车的转速范围是 \([L,R]\),初始时转速为 $ L$。每次升挡时,转速会变成 \(L\);降挡时,会变成 \(R\)。欧稳欧在每秒也可以踩油门,让转速增加 \(X\),再对 \(R\) 取 \(\text{min}\)。如果转速连续 \(K\) 秒都 \(=R\),那么这辆车的发动机会停止工作,在这 \(K\) 秒结束的一瞬间停下(即使 \(K\) 秒中经历了降档操作,仍然算这种情况)。
这些操作我们认为都是在每秒开头的一瞬间进行的,其中换挡操作比踩油门操作先进行。而这一秒内这辆车前进的距离是 转速\(\times\)挡位。
现在给出欧稳欧练习时的操作序列,你需要求出他一共前进的距离是多少。
输入格式
第一行六个整数 \(T,N,L,R,X,K\),\(T\) 表示总时间。
接下来 \(T\) 行,每行两个整数 \(x,y\),表示这一秒的操作。
其中 \(x=0\) 表示升挡,\(x=1\) 表示降挡,\(x=2\) 表示挡位不变;\(y=0\) 表示不踩油门,\(y=1\) 表示踩油门。(不要问为什么没有刹车)
输出格式
一行一个整数,表示给定操作序列的前进距离。
如果欧稳欧在挡位为 \(N\) 时升挡,或在挡位为 \(1\) 时降挡,那么给定序列不合法,输出 \(-1\)。
输入输出样例
输入 #1
5 3 1 10 5 100
0 1
0 0
2 1
2 1
1 1
输出 #1
83
输入 #2
3 1 1 1 1 2
2 0
2 1
2 0
输出 #2
2
输入 #3
1 2 3 4 5 6
1 0
输出 #3
-1
说明/提示
对于样例一:
第一秒挡位为 \(2\),转速为 \(6\);
第二秒挡位为 \(3\),转速为 \(1\);
第三秒挡位为 \(3\),转速为 \(6\);
第四秒挡位为 \(3\),转速为 \(10\);
第五秒挡位为 \(2\),转速为 \(10\)。
对于样例二,前进两秒之后发动机就停止了工作。
对于 \(30\%\) 的数据,没有挡位操作(即保证 \(x=2\));
对于另外 \(30\%\) 的数据,没有踩油门操作(即保证 \(y=0\));
对于全部数据,保证 \(1\le T,N,L,R,X,K\le 10^6,L\le R\)。
【思路】
模拟
【说在前面的话】
其实很简单的我想复杂了
所以看了很久的题目,担心写出锅
主要原因还是因为这道题是gyh大佬给我推荐的
大佬推荐的当然简单不了啦
不过没想到gyh这么体贴我这个蒟蒻
找适合我这个水平的题目来给我做
开心qwq
(为什么不开long long 只有10分,这不对)
【题目分析】
关于档位有三个操作,关于速度有两个操作
升档,降档,不动和加速,不加速
根据给出的数据来模拟就好了
【核心思路】
根据提议来模拟就好了
先判断是升档,降档还是不动
如果是升档那就让档位增加,速度变为l
如果是降档那就让档位减少,速度变为r
如果是不动那就是不用管了
在判断是加速还是不加速
加速那就用现在速度加上x之后和r取min
不加速就不用管
还有会不会抛锚这也是一个问题
只需要开一个变量储存已经在r速度上面持续了多久
如果这个时候速度是r那就变量++
不然就要变为0
【完整代码】
#include<iostream>
#include<cstdio>
#define int long long
using namespace std;
int read()
{
int sum = 0,fg = 1;
char c = getchar();
while(c < '0' || c > '9')
{
if(c == '-')fg = -1;
c = getchar();
}
while(c >= '0' && c <= '9')
{
sum = sum * 10 + c - '0';
c = getchar();
}
return sum * fg;
}
signed main()
{
int ans = 0;
int t = read(),n = read(),l = read(),r = read(),x = read(),k = read();
int dang = 1,zhuan = l;
int last = 0;
for(register int i = 1;i <= t;++ i)
{
int opt = read(),y = read();
if(opt == 0)//升档
{
if(dang == n)
{
cout << -1 << endl;
return 0;
}
dang ++;
zhuan = l;//先升档
//如果不踩油门,那就只处理升档,如果踩油门那就加速
if(y == 1)
zhuan = min(r,zhuan + x);
}
else
if(opt == 1)//降档
{
if(dang == 1)
{
cout << -1 << endl;
return 0;
}
dang --;
zhuan = r;
if(y == 1)
zhuan = min(r,zhuan + x);
}
else//档位不变
{
if(y == 1)
zhuan = min(r,zhuan + x);
}
ans += zhuan * dang;
if(zhuan == r)
last ++;
else
last = 0;
if(last == k)
break;
}
cout << ans << endl;
return 0;
}
/*
6 3 1 10 5 100
0 1
0 0
2 1
2 1
1 1
1 0
*/
洛谷 P5269 欧稳欧再次学车 题解的更多相关文章
- 【洛谷P3369】【模板】普通平衡树题解
[洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...
- 洛谷 P1992 不想兜圈的老爷爷 题解
洛谷 P1992 不想兜圈的老爷爷 题解 题目描述 一位年过古稀的老爷爷在乡间行走 而他不想兜圈子 因为那会使他昏沉 偶然路过小A发扬助人为乐优良传统 带上地图 想知道路况是否一定使他清醒 usqwe ...
- BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...
- 洛谷p3384【模板】树链剖分题解
洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...
- 洛谷 P1789 【Mc生存】插火把 题解
P1789 [Mc生存]插火把 题目背景 初一党应该都知道...... 题目描述 话说有一天 linyorson 在"我的世界"开了一个 \(n\times n(n\le 100) ...
- 洛谷P5269 欧稳欧再次学车
正常模拟就好~ 首先初始化:转速=l, 档位=1 然后读入数据 由于先要处理换挡操作,所以我们先按照x处理,再按照y处理 当x=0时,档位+1,转速=l 当x=1时,档位-1,转速=r 当y=1时,转 ...
- 题解 洛谷P5259【欧稳欧再次学车】
实际上没什么可说的,暴力大模拟就好. 一定要开long long! 一定要开long long! 一定要开long long! (不然会炸数据的!!!) //Stand up for the fait ...
- $P5269 欧稳欧再次学车$
\(problem\) 哇 看各位巨佬都来发\(T1\)的题解 我也来发一篇.(别的题目不会别瞎bb) 题目大意就是 \(T\) 秒 能走多少路程 第一行六个整数 \(T,N,L,R,X,K\) 接下 ...
- 【洛谷】【扩欧】P1516 青蛙的约会
[题目描述] 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有 ...
随机推荐
- SpringBoot引入第三方jar包或本地jar包的处理方式
在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢 一般有两种方法 第一种是将本地jar包安装在本地maven库 第二种是将本地ja ...
- js获取简单表单对象(1)
<form id="form"> <input type="text" name="username" value ...
- APS.NET MVC + EF (02)---深入理解ADO.NET Entity Framework
2.7 深入理解Entity Framework 性能问题几乎是一切ORM框架的通病,对于EF来说,引起性能低的原因主要在以下几个方面. 复杂的对象管理机制为了在.NET中更好地管理模型对象,EF提供 ...
- ASP.NET 异步编程之Async await
本文重点介绍的是.NET Framework4.5 推出的异步编程方案 async await 请先看个5分钟的微软演示的视频:视频地址: https://channel9.msdn.com/Blo ...
- Vue学习之路由vue-router小结(九)
一.路由: 1.后端路由: 对于普通网站,所有的超链接都是URL地址,所有的URL地址都对应服务器上对应的资源: 2.前端路由: 对于单页面应用程序来说,主要通过URL中的hash(#号)来实现不同页 ...
- 45、导航钩子函数中使用next()和next('\指定路径')的区别:
当在router.beforeEach((to, from, next) 钩子函数中使用: 1.使用next()时,直接跳转到下一页,没有再执行导航钩子函数 2.使用next('指定路径')跳转到指定 ...
- Java语言的介绍
1. 计算机语言 语言:沟通交流的方式 计算机语言:人与计算机之间的交流方式 java是一门计算机编程语言,也是意大利自行车品牌 软件工程师,java开发工程师 <--------------- ...
- Qt NetWork即时通讯网络聊天室(基于TCP)
本文使用QT的网络模块来创建一个网络聊天室程序,主要包括以下功能: 1.基于TCP的可靠连接(QTcpServer.QTcpSocket) 2.一个服务器,多个客户端 3.服务器接收到某个客户端的请求 ...
- idea注释类,方法
1.添加类注释:file-settings-file and code Templates-Class #if (${PACKAGE_NAME} && ${PACKAGE_NAME} ...
- spring和springmvc
1. 为什么使用Spring ? 1). 方便解耦,简化开发 通过Spring提供的IoC容器,可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合. 2). AOP编程的 ...