Blue:贪心,单调队列
考场上什么都没想。
显然在扯淡了,应该说是刚开始想了一些没用的。
有决策单调性,所以二分答案?
好,那就二分答案。想想怎么检查每只蛤能不能都跳到终点?
那么每只蛤都不能掉队啊。
如果你现在遇到了一个石头,你就会优先让最落后的那只蛤跳过来蛤。(因为都不能掉队啊)
如果它离的太远跳不过来了,那么这只蛤就永远地掉队了。
嗯,这个想法还是比较简单的吧。
然后我们可以发现这个思路貌似是普适的。我们现在去掉二分答案。
所以现在问题不再是检查是否都不掉队,而是直接询问有多少个蛤能过去。
继续上面的思路,让最落后的蛤尝试跳过来,跳不过来就放弃它去让第二落后的蛤来。
然后有了这个思路就可以愉快的AC了。
当然我们需要证明(我没看题解,我自己口胡蛤)
对于任意多的蛤,分别标号为1234...,按照它们目前所在的位置排序
那么现在突然出现了一个石头用0表示:1234...0
现在要用蛤来跳,按照刚才的策略你会让1跳得到234...1
其它决策无非就2种,
一种是这块石头所有蛤都无视它:这一定不优,如果你要忽视它还要跳到后面,那么你在这里歇一下脚再往后跳当然不会变差啦
另一种就是让不是最落后的蛤跳到上面:你会得到12x4...3之类的(x表示被踩沉了的石头)
相较于最优决策,区别就是有一只还在原来的最落后位置,而最优决策下有一只蛤更靠前了一点(至少不再是那个最落后位置了)
而还在最落后位置上的那只蛤可能从此就掉队了,故这个决策不优。
所以维护一个队列,表示目前还没有被放弃的蛤的位置。
枚举每块石头,让队首的蛤不能跳就放弃,能跳就跳,把它从队首改变位置放到队尾。
因为石头已经排序,所以加入队尾的元素一定是递增的,所以队列自带单调。
所有的石头都跳完之后,队列里的蛤不能跳到终点的就放弃。
最后队列里有几个蛤就是几啦。
多测清空!蛤的初始位置重置为0!
#include<bits/stdc++.h>
using namespace std;
int n,m,d,l,x[],q[],t,h,T;
int main(){//freopen("blue.in","r",stdin);
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&n,&m,&d,&l);
for(int i=;i<=n;++i)scanf("%d",&x[i]);
h=;t=m;for(int i=;i<=m;++i)q[i]=;
for(int i=;i<=n;++i){
while(q[h]+d<x[i]&&h<=t)++h;
++h;q[++t]=x[i];
}
while(q[h]+d<l&&h<=t)h++;
if(t-h==m-)puts("Excited");
else printf("%d\n",t-h+);
}
}
代码复杂度:462B
Blue:贪心,单调队列的更多相关文章
- BZOJ 2424 订货(贪心+单调队列)
怎么题解都是用费用流做的啊...用单调队列多优美啊. 题意:某公司估计市场在第i个月对某产品的需求量为Ui,已知在第i月该产品的订货单价为di,上个月月底未销完的单位产品要付存贮费用m,假定第一月月初 ...
- HDU 6047 Maximum Sequence (贪心+单调队列)
题意:给定一个序列,让你构造出一个序列,满足条件,且最大.条件是 选取一个ai <= max{a[b[j], j]-j} 析:贪心,贪心策略就是先尽量产生大的,所以就是对于B序列尽量从头开始,由 ...
- BZOJ1233 [Usaco2009Open]干草堆tower[贪心+单调队列优化]
地址 注意思路!多看几遍! 很巧妙的一道题.不再是决策点以dp值中一部分含j项为维护对象,而是通过维护条件来获取决策. 首先有个贪心策略,让底层的宽度尽可能小,才能让高度尽可能高.所以应该倒着dp,表 ...
- USACO 2009 Open 干草塔 Tower of Hay(贪心+单调队列优化DP)
https://ac.nowcoder.com/acm/contest/1072/B Description 为了调整电灯亮度,贝西要用干草包堆出一座塔,然后爬到牛棚顶去把灯泡换掉.干草包会从传送带上 ...
- 【uva 11491】Erasing and Winning(算法效率--贪心+单调队列)
题意:有一个N位整数,要求输出删除其中D个数字之后的最大整数. 解法:贪心.(P.S.要小心,我WA了2次...)由于规定了整数的位数,那么我们要尽量让高位的数字大一些,也就是要尽量删去前面小的数字. ...
- Codeforces 985 最短水桶分配 沙堆构造 贪心单调对列
A B /* Huyyt */ #include <bits/stdc++.h> #define mem(a,b) memset(a,b,sizeof(a)) #define mkp(a, ...
- UVa 11491 Erasing and Winning (贪心,单调队列或暴力)
题意:给一个数字(开头非0),拿掉其中的d个数字,使剩下的数字最大(前后顺序不能变). 析:拿掉d个数字,还剩下n-d个数字.相当于从n个数字中按先后顺序选出n-d个数字使组成的数字最大,当然采用窗口 ...
- Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列)
Luogu 1020 导弹拦截(动态规划,最长不下降子序列,二分,STL运用,贪心,单调队列) Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺 ...
- 【贪心/DP/单调队列】【CF1029B】Creating the Contest
Description 给你一个单调不下降的长度为n的序列,请你找出一个最长的子序列,满足找出的子序列中,\(A_i<=A_{i-1}~\times~2\),其中i为下标,A为找出的子序列.对于 ...
- BZOJ4560 JLOI2016字符串覆盖(kmp+贪心+状压dp+单调队列)
首先kmp求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有是否与上个子串有交两 ...
随机推荐
- Future类型的连锁的运用
Future类型的连锁的运用: 洗脸 刷牙 吃早饭 看电视 出门 串行: import scala.concurrent.{Await, Future} import scala.util.{Fail ...
- .NET成人礼 | 还记得20年前一起拖过的控件吗?
本文是MVP Ediwang写的回忆一个80后的拖控件的感悟,与君共勉: 每一代人都有记忆里的味道.煤球炉.黑白电视机是属于父母的记忆.而“拖控件”式编程,启蒙了无数像我这样的80后(嗯,89也算80 ...
- Spring Boot (十三): Spring Boot 整合 RabbitMQ
1. 前言 RabbitMQ 是一个消息队列,说到消息队列,大家可能多多少少有听过,它主要的功能是用来实现应用服务的异步与解耦,同时也能起到削峰填谷.消息分发的作用. 消息队列在比较主要的一个作用是用 ...
- 如和用python给女朋友做个专属她的软件
如和用python给女朋友做个专属她的软件 在学习python的路上如果觉得枯燥就可以想我一样做一些有趣的事情就不会无聊了 python是一门及其有趣的语言. 人们都喜欢记住一些重要的日子,比如说跟女 ...
- redis安装详细
1.cd命令到你的下载文件夹下 2.输入命令下载redis ,可以自己选择下载的路径,redis表示版本号 wget http://download.redis.io/releases/redis ...
- python编程基础之十三
列表的通用操作: list1 = [43, 65, 76, 6] list2 = [45, 77, 90, 11, 2, 4, 66] print(list1+ list2) # 列表组合 prin ...
- linux 基本操作积累
1 sed 命令,替换含有指定字符的一整行数据 sed -i 's/原字符串/替换后的字符串/g' ./文件名 (此命令会全局替换[整个文件内替换]原字符串) sed -i.bak 's/原字符串/替 ...
- from..import 语句
from..import 语句 如果你希望直接将 argv 变量导入你的程序(为了避免每次都要输入 sys.),那么你可以通过使用 from sys import argv 语句来实现这一点. 警告: ...
- Java编程思想——第17章 容器深入研究 读书笔记(二)
五.List的功能方法 排除Collection已包含的方法外还增加了 boolean addAll(int index, Collection<? extends E> c);从索引位置 ...
- 渗透测试-基于白名单执行payload--Csc
复现亮神课程 基于白名单执行payload--csc 0x01 Csc.exe C#的在Windows平台下的编译器名称是Csc.exe,如果你的.NET FrameWork SDK安装在C盘,那么你 ...