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 欧稳欧再次学车 题解的更多相关文章

  1. 【洛谷P3369】【模板】普通平衡树题解

    [洛谷P3369][模板]普通平衡树题解 题目链接 题意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:1. 插入x数2. 删除x数(若有多个相同的数,因只删除一个)3 ...

  2. 洛谷 P1992 不想兜圈的老爷爷 题解

    洛谷 P1992 不想兜圈的老爷爷 题解 题目描述 一位年过古稀的老爷爷在乡间行走 而他不想兜圈子 因为那会使他昏沉 偶然路过小A发扬助人为乐优良传统 带上地图 想知道路况是否一定使他清醒 usqwe ...

  3. BZOJ5285 & 洛谷4424 & UOJ384:[HNOI/AHOI2018]寻宝游戏——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5285 https://www.luogu.org/problemnew/show/P4424 ht ...

  4. 洛谷p3384【模板】树链剖分题解

    洛谷p3384 [模板]树链剖分错误记录 首先感谢\(lfd\)在课上调了出来\(Orz\) \(1\).以后少写全局变量 \(2\).线段树递归的时候最好把左右区间一起传 \(3\).写\(dfs\ ...

  5. 洛谷 P1789 【Mc生存】插火把 题解

    P1789 [Mc生存]插火把 题目背景 初一党应该都知道...... 题目描述 话说有一天 linyorson 在"我的世界"开了一个 \(n\times n(n\le 100) ...

  6. 洛谷P5269 欧稳欧再次学车

    正常模拟就好~ 首先初始化:转速=l, 档位=1 然后读入数据 由于先要处理换挡操作,所以我们先按照x处理,再按照y处理 当x=0时,档位+1,转速=l 当x=1时,档位-1,转速=r 当y=1时,转 ...

  7. 题解 洛谷P5259【欧稳欧再次学车】

    实际上没什么可说的,暴力大模拟就好. 一定要开long long! 一定要开long long! 一定要开long long! (不然会炸数据的!!!) //Stand up for the fait ...

  8. $P5269 欧稳欧再次学车$

    \(problem\) 哇 看各位巨佬都来发\(T1\)的题解 我也来发一篇.(别的题目不会别瞎bb) 题目大意就是 \(T\) 秒 能走多少路程 第一行六个整数 \(T,N,L,R,X,K\) 接下 ...

  9. 【洛谷】【扩欧】P1516 青蛙的约会

    [题目描述] 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有 ...

随机推荐

  1. ubuntu开机自动挂载硬盘

    1. 查看硬盘信息 df -h 命令找到目标硬盘(可根据 磁盘分区(路径).分区大小.挂载点  确认/定位 目标) sudo blkid 命令找到目标硬盘的UUID,(关注一下分区的格式化类型,如ex ...

  2. Java链表操作代码

    /** * */ package com.cherish.SwordRefersToOffer; /** * @author acer * */ public class test_22链表中倒数第k ...

  3. C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳)

    C# 网络连接中异常断线的处理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(设置心跳) 在使用 TcpClient 网络连接中常常会发生客户端连接异常断 ...

  4. 3DESC加密算法

    3DESC 请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程序之间采用的算法有一点差异,java的3des加密采用的是"DESede/ ...

  5. Appium中app的元素定位

    app定位方式,本文只讲Android手机的定位方式. 前提条件是adb连接到模拟器或者是手机(具体连接方式这里不再讲解),证明已连接到设备 adb devices app元素定位工具一:UI Aut ...

  6. python基础--py2与py3编码

    python2 与 python3的编码和解码 注意:小心,容易弄混 目录: 1.python2d 的encode & decode 2.python3的encode & decode ...

  7. 米尔科技MPSoC开发板评测

    米尔科技推出的MYD-CZU3EG开发板搭载的就是UltraScale+ MPSoC平台器件 — XCZU3EG,它集成了四核Cortex-A53 处理器,双核 Cortex-R5 实时处理单元以及M ...

  8. DMA初识

    功能 DMA可以在CPU不干涉的情况下,进行数据的搬移.例如:通过DMA来获取摄像头输出的像素数据,而占用少量CPU资源. DMAMUX DMAMUX负责数据的路由:将触发源绑定到特定的DMA通道,当 ...

  9. Java的常见术语(PO/POJO/VO/BO/DAO/DTO)

    PO(persistant object) 持久对象在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了.通常对应数据模型(数据库),本身还有部分业务逻辑的处理.可以看成是与数据库 ...

  10. 离线环境下自动化部署python环境(含openssl)

    遇到有项目要在内网环境下安装python项目,所以空余时写了自动化部署python环境和python项目的脚本,由于项目涉密,这里仅提供自动化部署python环境的shell脚本,包括openssl的 ...