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. 【java】单实例下的 流水号【21位】

    单实例环境,不是分布式 需要流水号 /** * 流水号生成器 * * 年+天号+毫秒+随机数 * 2019+134+480+11位随机数 * 4+3+3+11 = 21位 * * * @author ...

  2. java面向对象的基本概念

    面向对象的基本概念 这里先介绍面向对象程序设计的一些关键概念,并开始使用类,你需要学习一些术语,我们尽量用比较浅显的语言来介绍,因为这些内容都比较重要,所以希望大家好好好理解. 一.什么是对象和面向对 ...

  3. C#读写调整修改设置UVC摄像头画面-逆光对比

    有时,我们需要在C#代码中对摄像头的逆光对比进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的 ...

  4. quota - linux磁盘配额管理

    磁盘管理系列 linux磁盘管理系列一:磁盘配额管理   http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_040_quota.html l ...

  5. drf序列化与反序列化

    序列化器-Serializer 定义序列化器 Django REST framework中的Serializer使用类来定义,须继承自rest_framework.serializers.Serial ...

  6. elementUi vue el-radio 监听选中变化

    //change是radio-group标签的事件 <div> <el-radio-group v-model="radioSex" @change=" ...

  7. 【前端_js】Bootstrap之表单验证

    Bootstrap表单验证插件bootstrapValidator使用方法整理 BootstrapValidator 表单验证超详细教程    

  8. Docker搭建Gogs

    Gogs需要使用到数据库,需要先安装数据库(如mysql),并创建名为gogs的数据库,启动后需要配置数据库连接. 镜像获取:docker pull gogs/gogs 安装运行: docker ru ...

  9. Oracle使用expdp/impdp迁移数据

    Oracle使用expdp/impdp迁移数据 1.#以下步骤在开发库执行(expdp导出) 一.创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. sqlplus / ...

  10. python 导入导出依赖包命令

    程序中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号.如果 要在另一台电脑上重新生成虚拟环境,这个文件的重要性就体现出来了,例如部署程序时 使用的电脑.pip ...