题目描述

$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++

最新文章

  1. CI-持续集成(1)-软件工业“流水线”概述
  2. opencv的图片的灰度处理‘
  3. handlebars,each循环里面套each循环
  4. [python]闭包到底是什么鬼?
  5. Yii源码阅读笔记(十一)
  6. Joke
  7. [apache]用shell分析网站的访问情况
  8. WinFrom玩转config配置文件
  9. Objective-C文件和目录操作,IOS文件操作,NSFileManager使用文件操作
  10. [Python]再学 socket 之非阻塞 Server
  11. 201521123001《Java程序设计》第1周学习总结
  12. swap分析及其使用
  13. C# 虚拟串口通信
  14. Linux操作系统log日志日志分别指什么
  15. C#设计模式之二十一访问者模式(Visitor Pattern)【行为型】
  16. java中存储mysql数据库时间类型
  17. org.apache.commons.vfs 配置文件里面 密码包含 @
  18. 开源微信管家平台——JeeWx 捷微4.0 微服务版本发布,全新架构,全新UI,提供强大的图文编辑器
  19. Confluence 6 创建一个项目空间
  20. BASIC-24_蓝桥杯_龟兔赛跑预测

热门文章

  1. Struts的相关基础
  2. 帝国cms 修改分页样式
  3. 用帝国cms 反馈内容的时候自动发送邮箱开发流程
  4. 如果您的浏览器不支持javascript功能
  5. SAP日志表CDHDR 和
  6. JAVA 分布式
  7. 【转】草根老师的 linux字符设备驱动详解
  8. raise与raise&#183;&#183;&#183;&#183;&#183;&#183;from
  9. deep_learning_Function_numpy_random.normal()
  10. 版本控制工具 svn 二