[nowcoder]青蛙
链接:https://www.nowcoder.com/acm/contest/158/F
挺有意思的一道题,考场并查集忘记路径压缩就没AK==
很显然一个贪心是不,每只青蛙使劲往前跳,能跳多远跳多远
因为青蛙跳的距离一定是单增的,所以O(m)就可以处理出来每只青蛙跳多远
然后青蛙能跳到的最远的没青蛙的点我们可以用并查集来维护一下
如图假如A,B都能跳到D,让A跳到D,D就有青蛙了,让D的父亲指向上一个点
这时我们再跳B,B就跳到C上了
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define M 300010
using namespace std;
int n,m,ans,d,T;
int fa[M],a[M],maxn[M];
bool vis[M];
inline int read() {
char c = getchar() ; int x = , w = ;
while(c>''||c<'') { if(c=='-') w = - ; c = getchar() ; }
while(c>=''&&c<='') { x = x*+c-'' ; c = getchar() ; }
return x*w ;
}
int find(int x) {return fa[x]==x?x:fa[x]=find(fa[x]);}
int main()
{
//freopen("tt.in","r",stdin);
scanf("%d",&T);
while(T--)
{
memset(vis,false,sizeof(vis));
ans=;
scanf("%d%d%d",&n,&m,&d);
for(int i=;i<=m+;i++)
{
a[i]=read();
fa[i]=i;
}
maxn[]=;
for(int i=;i<=m+;i++)
{
maxn[i]=maxn[i-];
while(a[maxn[i]+]-a[i]<=d&&maxn[i]<=m) maxn[i]++;
}
for(int i=;i<=maxn[];i++) vis[i]=true;
for(int i=;i<=m+;i++)
{
if(!vis[i]) continue;
int MX=find(maxn[i]);
if(MX<=i) continue;
if(MX<=) continue;
if(!vis[MX])
{
vis[i]=false;
vis[MX]=true;
fa[MX]=fa[MX-];
}
}
for(int i=;i<=m+;i++)
if(vis[i]&&a[i]+d>=a[m+])
ans++;
printf("%d\n",ans);
}
return ;
}
[nowcoder]青蛙的更多相关文章
- 青蛙跳台阶问题——剑指offer
题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级台阶总共有多少中跳法. http://www.nowcoder.com/books/coding-interviews?pa ...
- 青蛙跳N阶(变态跳)
https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387 描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级 ...
- 牛客网挑战赛24 青蛙(BFS)
链接:https://www.nowcoder.com/acm/contest/157/E来源:牛客网 有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟.于是便开始踏上了旅途 一直这 ...
- [LeetCode] Frog Jump 青蛙过河
A frog is crossing a river. The river is divided into x units and at each unit there may or may not ...
- POJ1061青蛙的约会[扩展欧几里得]
青蛙的约会 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 108911 Accepted: 21866 Descript ...
- 青蛙跳100级台阶算法,完整可运行,php版本
/* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...
- 题目描述: k一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
时间限制:1秒 空间限制:32768k 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,9 ...
- JAVA-小青蛙跳石头游戏
游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙.游戏原址就不分享了,只能在手机上打开. 下面是源码: /* * Main.java * */ ...
- poj 1061 青蛙的约会 拓展欧几里得模板
// poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...
随机推荐
- Eclipse虚拟内存不足【Eclipse中虚拟内存设置】
Eclipse最近在做J2EE项目中 发现老是出现虚拟内存不足的提示 前2天去加了根内存 问题同样存在 为了让我在写代码时 不在出现那讨厌的内存不足的提示 也为了 不让那破机器再卡住 今天找到了解决方 ...
- JS循环语句的理解
循环语句就是让程序重复性去做某些工作 最常见的就是for循环 那它的写法都有哪些呢? 1.必须要有初始值 2.要有条件判断 3.状态的改变 4.循环体 一定要控制循环多少次结束,否则就变成了死循环,消 ...
- sql server剔除某列的汉字,函数。
create function fun_del_chinese(@col varchar(1000))returns varchar(1000)ASbegin declare @returnchar ...
- [POJ] Brackets Sequence
This problem can be solved elegantly using dynamic programming. We maintain two arrays: cnt[i][j] -- ...
- 解决jsp上传文件,重启tomcat后文件和文件夹自动删除
吼吼,我遇到的问题是这样的......我写了一个图片上传的方法,上传时,判断没有这个目录就自动建立一个.然后开始上传图片,能成功,能在服务器找到文件夹和相应的文件. 但是,重启项目,或者清理缓存之后, ...
- IntelliJ IDEA 工具技巧
IntelliJ IDEA 工具技巧 以下都是自己积累的IntelliJ IDEA 使用技巧,比较零碎,观看不便之处还望海涵,如有错误之处还望指正 自己常用,不懂的可以加群询问:244930845 S ...
- SQL-修改: 将日期修改为空NULL、修改为空的记录
1.将日期修改为空NULL update 表 set 字段=null where 字段='' 如果设置为‘’,会默认1900-01-01 2.修改为空的记录 update [dbo].[pub_ite ...
- 使用Docker创建Elasticsearch服务
一.Docker是什么? Docker是一个开源工具,能将一个WEB应用封装在一个轻量级,便携且独立的容器里,然后可以运行在几乎任何服务环境下.Docker的容器能使应用跑在任何服务器上并且表现一致. ...
- module使用
官方文档:http://modules.sourceforge.net/ 加载 module load 卸载 module unload 查看已加载 module list 查看可用 module a ...
- 【opencv安裝】ubuntu16 opencv安装+测试
ubuntu16.04 install opencv2.4 to python2 and c++ 四大主流库比较: 对OpenCV的印象:功能十分的强大,而且支持目前先进的图像处理技术,体系十分完善, ...