题目描述

$Blue$是个动物学家,不仅喜欢研究猫和老鼠,还喜欢研究青蛙。
他最近开始研究青蛙过河的问题,可以简化成:数轴上$0$为岸边,$L$为河对岸。$(0,L)$中间存在$n$个石子。已知青蛙一跳可以跳距离$D$,而且不能沾水。求问能不能跳到河对岸。当然他觉得这个问题非常$naïve$,于是在思考如果青蛙有$m$个,且石头被踩过之后就会沉下去,$m$个青蛙还能不能依次安全过河。如果不能则问最多能有多少个过河。


输入格式

输入第一行为一个正整数$T$代表数据组数。每组数据第一行四个正整数:$n$、$m$、$D$、$L$。
第二行$n$个升序正整数$a_i$代表第$i$个石子坐标为$a_i$。保证没有重复且都小于$L$。


输出格式

输出$T$行$"Excited"$代表全部能过河或者一个整数代表有多少个能过河的。


样例

样例输入:

5
10 9 16 30
2 4 6 9 11 15 18 19 25 27
10 1 23 30
10 11 13 14 15 16 18 26 27 29
10 7 28 30
2 3 7 9 12 15 20 24 27 28
10 3 18 30
1 6 9 14 18 19 22 27 28 29
10 7 10 30
1 2 4 6 18 19 20 22 23 26

样例输出:

5
Excited
Excited
Excited
0


数据范围与提示

对于$10%$的数据保证$m=1$。
对于另外$10%$的数据保证$D=L$。
对于另外$10%$的数据保证$n=L-1$。
对于另外$30%$的数据保证$n\leqslant 100,L\leqslant {10}^5$。
对于$100%$的数据保证$m\leqslant n\leqslant {10}^6,D\leqslant L\leqslant {10}^9$。
数据范围中的$n$、$m$皆代表题目描述中$n$、$m$的总和。


题解

一开始我想的是二分答案,但是发现不好搞,于是就想贪心啦。

我们可以设两个指针,让所有的青蛙都在这个范围内,然后跳这个区间,最大化这个区间即可,不用管青蛙的数量是否大于了总数,最后比较就好了。

没什么好说的,一定要记住$"Excited"$怎么拼(考场上拼错疯跑80分)。

时间复杂度:$\Theta(n)$。

期望得分:$100$分。

实际得分:$100$分。


代码时刻

#include<bits/stdc++.h>
using namespace std;
int n,m,D,L;
int a[2000000];
int lft,rht;
int ans;
void pre_work()
{
ans=0;
lft=1;
rht=n;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%d",&n,&m,&D,&L);
pre_work();
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int i=1;i<=n;i++)if(a[i]>D){rht=i-1;break;}
while(lft<=rht)
{
if(a[rht]+D>=L){ans=1;break;}
if(rht==n)break;
if(a[rht+1]-a[lft]<=D)rht++;
lft++;
}
if(!ans){puts("0");continue;}
int flag=rht-1;
while(lft<=flag)
{
if(rht==n)break;
if(a[rht+1]-a[lft]>D)lft++;
else
{
lft++;
rht++;
ans++;
}
}
while(flag>=lft&&a[flag]>=L-D)
{
flag--;
ans++;
}
ans>=m?puts("Excited"):printf("%d\n",ans);
}
return 0;
}

rp++

[CSP-S模拟测试]:Blue(贪心)的更多相关文章

  1. 8.10 NOIP模拟测试16 Blue+Weed+Drink

    T1 Blue 贪心,每次跳得时候跳能跳到的最远的地方,跳过的就把他设为0,每次二分找到位置,一直跳就行,如果能跳到的位置就是当前位置或比当前位置还小(数组里现在呆着的这一块石头,二分得到的就是当前位 ...

  2. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  3. csp-s模拟测试95

    csp-s模拟测试95 去世场祭. $T1$:这不裸的除法分块吗. $T2$:这不裸的数据结构优化$Dp$吗. $T3$:这不裸的我什么都不会搜索骗$30$分吗. 几分钟后. 这除法分块太劲了..(你 ...

  4. csp-s模拟测试92

    csp-s模拟测试92 关于$T1$:最短路这一定建边最短路. 关于$T2$:傻逼$Dp$这一定线段树优化$Dp$. 关于$T3$:最小生成树+树P+换跟一定是这样. 深入(?)思考$T1$:我是傻逼 ...

  5. csp-s模拟测试85

    csp-s模拟测试85 $T1$全场秒切没有什么区分度,$T2$全场成功转化题意但是我并不会打,$T3$暴力都没打很遗憾. 100 00:21:49 02:56:35 02:56:49 135 02: ...

  6. 「题解」NOIP模拟测试题解乱写II(36)

    毕竟考得太频繁了于是不可能每次考试都写题解.(我解释个什么劲啊又没有人看) 甚至有的题目都没有改掉.跑过来写题解一方面是总结,另一方面也是放松了. NOIP模拟测试36 T1字符 这题我完全懵逼了.就 ...

  7. 2019.8.3 [HZOI]NOIP模拟测试12 C. 分组

    2019.8.3 [HZOI]NOIP模拟测试12 C. 分组 全场比赛题解:https://pan.baidu.com/s/1eSAMuXk 刚看这题觉得很难,于是数据点分治 k只有1和2两种,分别 ...

  8. Android单元测试与模拟测试详解

    测试与基本规范 为什么需要测试? 为了稳定性,能够明确的了解是否正确的完成开发. 更加易于维护,能够在修改代码后保证功能不被破坏. 集成一些工具,规范开发规范,使得代码更加稳定( 如通过 phabri ...

  9. [开源]微信在线信息模拟测试工具(基于Senparc.Weixin.MP开发)

    目前为止似乎还没有看到过Web版的普通消息测试工具(除了官方针对高级接口的),现有的一些桌面版的几个测试工具也都是使用XML直接请求,非常不友好,我们来尝试做一个“面向对象”操作的测试工具. 测试工具 ...

随机推荐

  1. CentOS 中利用docker安装MySQL

    1.前提条件 centos7 且内核版本高于3.10, 可通过命令: uname -r 查看内核版本 2.利用yum 安装docker 安装一些必要的系统工具: sudo yum install -y ...

  2. C#选择文件保存路劲

    private void button8_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrow ...

  3. BootStrape基础使用

    官网:www.bootcss.com 一. 全局css样式 栅格系统 栅格系统用于通过一系列的行(row)与列(column)的组合来创建页面布局 <!DOCTYPE html> < ...

  4. Go学习笔记【一、概述】

    工作需要,即将要把部分查询计算的逻辑翻译成Go语言,来提升查询效率 在此需要对Go语言进行学习,先把入门教程浏览了一遍,发现有些语法和C很类似,还有部分类似于Python,还没有深入学习,先开个坑,业 ...

  5. 构建虚拟工控环境系列 - 罗克韦尔虚拟PLC

    一. 概述 本篇主要介绍罗克韦尔虚拟PLC的搭建,使用的操作系统为Windows7 x86 Ultimate(DEEP_GHOST_WIN7_SP1_X86_V2015_06.iso),虚拟化软件为 ...

  6. Django静态资源配置

    Settings文件设置 INSTALLED_APPS 设置 确保 django.contrib.staticfiles 添加到INSTALLED_APPS中 默认是已经添加上的 INSTALLED_ ...

  7. Python lambda 知识点

    作者说学会了lambda后,你会用上瘾的,因为让代码复用和简洁. 初识lamdba不太好理解,尤其是它能当着一个变量传递给函数,不过多学着写几个例子就好了,下面是我的学习笔记. lambda 操作符( ...

  8. linux工具之iostat

    iostat 是I/O  statistics(输入/输出统计)缩写iostat工具将对系统磁磁盘活动进行监视iostat属于sysstat软件包可以用yum   install   sysstat ...

  9. Linux根文件系统和目录结构及bash特性4

    文件管理工具:cp,mv,rm    cp命令:copy                cp命令主要用于复制文件或目录 语法:        单源复制        cp [OPTION]... [- ...

  10. js创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    普通方法创建对象 var obj = { name:"猪八戒", sayname:function () { alert(this.name); } } var obj1 = { ...