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求出每个子串能放在哪些位置.接下来的两部分贪心和状压都可以,各取比较方便的. 最大值考虑贪心.考虑枚举子串的左端点出现顺序,在此基础上每个子串的位置肯定都应该尽量靠前,有是否与上个子串有交两 ...
随机推荐
- SpringBoot2+Netty打造通俗简版RPC通信框架(升级版)
背景 上篇文章我简单的介绍了自己打造的通俗简版RPC通信框架,这篇是对简版的增强~ 如果大家对此项目还感兴趣的话,可到码云上瞄瞄:Netty-RPC 上 ...
- [docker swarm] 从单容器走向负载均衡部署
背景 之前写过<<docker-compose真香>> 和<docker-compose.docker stack前世今生>两篇博客, 回顾一下思路: ① dock ...
- 五、springboot 简单优雅是实现邮件服务
前言 spring boot 的项目放下小半个月没有更新了,终于闲下来可以开心的接着写啦. 之前我们配置好mybatis 多数据源的,接下来我们需要做一个邮件服务.比如你注册的时候,需要输入验证码来校 ...
- redis主从配置 从而实现数据备份和读写分离
首先打开cmd,用cd找到你的redis文件夹,我的操作是 在你的第一个redis客户端文件夹配置文件中,搜索port,找到如下位置 端口号设置为6379(默认的.后面一个,两个或者多个客户端分别修改 ...
- Java集合总结—再也不怕面试问到集合了
Java集合总结 1.常见的集合 Map接口和Collection接口是所有集合框架的父接口: Collection接口的子接口包括:Set接口和List接口 Map接口的实现类主要有:HashMap ...
- node的重点学习笔记(1)————node
node的重点学习笔记(1)----node 提到node就必须提一下他的npm了,npm是世界上最大的开放源代码的生态系统.通俗来说这就如同亚马逊丛林,要啥物种有啥物种,一个巨大的生态圈,里面有一堆 ...
- Bitset改进你的程序质量
1:Bitset介绍 BitSet 是用于存储二进制位和对二进制进行操作的 Java 数据结构, 此类实现了一个按需增长的位向量.位 set 的每个组件都有一个 boolean 值.用非负的整数将 B ...
- MySQL学习(一)索引的基本认识
MySQL中,所有的数据类型都可以被索引,包括普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等. 额外的:我已知的自动创建索引的时机:创建主键,唯一,外键约束的时候 一.索引简介 1.1 ...
- PHP array_mulitsort
1.函数的作用:对多维数组进行排序 2.函数的例子: 例子一: <?php // http://php.net/manual/zh/function.array-multisort.php $m ...
- Eureka错误解决方法
# Eureka错误解决方法 ## security.basic.enabled 配置过时或不可用默认情况下:用户名:user密码:启动应用在控制台会输出,如下图: 也可以通过如下属性配置:sprin ...