[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 ...
随机推荐
- sql查询用nolock
大家在写查询时,为了性能,往往会在表后面加一个nolock,或者是with(nolock),其目的就是查询是不锁定表,从而达到提高查询速度的目的. 什么是并发访问:同一时间有多个用户访问同一资源,并发 ...
- springMVC的url-pattern /和/*的区别
总之,关于web.xml的url映射的小知识: <url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样 ...
- bootstrap 媒体查询
//各类设备的分辨率 /*超小设备(手机,小于768px)*/ /* Bootstrap 中默认情况下没有媒体查询 */ /*超小型设备(小于768px)*/ @media (min-width:@s ...
- PLSQL Developer在未安装Oracle Client情况下连接Oracle
常用的Oracle开发的工具有SQL Developer和PL/SQL Developer, 用PL/SQL连接oracle数据库,不管是本地的还是远程的,一般都需要安装oracle客户端 如何达到不 ...
- reg_action
function check_email($win) { $win = trim($win); $reg = '/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* ...
- IO流入门-第四章-FileReader
FileReader基本用法和方法示例 /* java.io.Reader java.io.InputStreamReader 转换流(字节输入流---->字符输入流) java.io.File ...
- ES6通过WeakMap解决内存泄漏问题
一.Map 1.定义 Map对象保存键值对,类似于数据结构字典:与传统上的对象只能用字符串当键不同,Map对象可以使用任意值当键. 2.语法 new Map([iterable]) 属性 size:返 ...
- PHP的几种排序方法
<?php /** * PHP最常用的四个排序方法及二种查找方法 * 下面的排序方法全部都通过测试 * auther : soulence * date : 2015/06/20 */ //PH ...
- python3 基础数据类型
一.基础数据类型分类 python的数据类型主要包括以下几种: 1.数字 2.字符串 3.列表 4.字典 5.元组 6.集合 1.数字 int 数字主要是用于计算用的,使用方法并不多 #bit_len ...
- java内存相关
(类是对象的抽象,而对象是类的具体实例.类是抽象的,不占用内存,而对象是具体的,占用存储空间.) 1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内 ...