[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 ...
随机推荐
- vs2017 git 操作重置、还原、挑拣对比
工具 :vs2017 git 操作 背景:本地与远程分支同步 操作:还原.挑拣.重置--hard .重置--mixed 分支:本地1.本地2.origin\本地1 基本操作 1:分支:本地2-ad ...
- 手动爬虫之淘宝笔记本栏(ptyhon3)
1.这次爬虫用到了之前封装的Url_ProxyHelper类,源代码如下 import urllib.request as ur class Url_ProxyHelper: def __init__ ...
- 手动爬虫之报头及代理封装类(python3)
本人刚刚学习爬虫,见每次都需要添加报头比较繁琐,故将该过程封装为Url_ProxyHelper类,代码如下 import urllib.request as ur class Url_ProxyHel ...
- finereport-JS
JS实现定时刷新报表 setInterval("self.location.reload();",10000); //10000ms即每10s刷新一次页面. 注:对于cpt报表,若 ...
- python文件上传工具实现
0x00 之前验收waf模块webshell效果,组网pc--waf--webserver,收集网络上的webshell样本,进行上传测试.由于数量较多8000+个样本, 只好写了个工具进行验收. w ...
- mysql_系统数据库认识
show databases:查看mysql自带数据库有information_schema,mysql, performance_schema, test information_schema数据库 ...
- mysql_表内容_操作
1.增 语法:insert into 表 (列名,列名...) values (值,值...) # 插入单条数据 insert into 表 (列名,列名...) values (值,值...) # ...
- Java RTTI and Reflection
Reference: Java编程思想 java 反射(Reflect) Java系列笔记(2) - Java RTTI和反射机制 Java Reflection in Action, 有空再补 -- ...
- EasySQLMAIL使用实践系列
原文:http://blog.sina.com.cn/s/articlelist_5713986487_0_1.html 通过sql语句发送微信消息(转) 使用EasySQLMAIL的外部接口功能实现 ...
- 005-环境安装【docker、fabric】
1.参考地址:https://hyperledger-fabric.readthedocs.io/en/latest/prereqs.html#install-curl 一.前置条件和系统配置 1.安 ...