链接: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]青蛙的更多相关文章

  1. 青蛙跳台阶问题——剑指offer

    题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,求该青蛙跳上一个n级台阶总共有多少中跳法. http://www.nowcoder.com/books/coding-interviews?pa ...

  2. 青蛙跳N阶(变态跳)

    https://www.nowcoder.com/questionTerminal/22243d016f6b47f2a6928b4313c85387 描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级 ...

  3. 牛客网挑战赛24 青蛙(BFS)

    链接:https://www.nowcoder.com/acm/contest/157/E来源:牛客网 有一只可爱的老青蛙,在路的另一端发现了一个黑的东西,想过去一探究竟.于是便开始踏上了旅途 一直这 ...

  4. [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 ...

  5. POJ1061青蛙的约会[扩展欧几里得]

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 108911   Accepted: 21866 Descript ...

  6. 青蛙跳100级台阶算法,完整可运行,php版本

    /* 算法题目 * 2016年4月11日16:11:08 * 一只青蛙,一次可以跳1步,或者2步,或者3步,现在要跳100级台阶,请问青蛙有多少种上100级台阶的跳法 * 1步的有$n 2步的有$m ...

  7. 题目描述: k一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

    时间限制:1秒     空间限制:32768k 斐波那契数列指的是这样一个数列: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,9 ...

  8. JAVA-小青蛙跳石头游戏

    游戏摘自微信传的手机网页版小游戏,我拿来做成了JAVA的界面版,但是没有去做素材,,直接拿方块代替小青蛙.游戏原址就不分享了,只能在手机上打开. 下面是源码: /* * Main.java * */ ...

  9. poj 1061 青蛙的约会 拓展欧几里得模板

    // poj 1061 青蛙的约会 拓展欧几里得模板 // 注意进行exgcd时,保证a,b是正数,最后的答案如果是负数,要加上一个膜 #include <cstdio> #include ...

随机推荐

  1. 提高PHP编程技术的方法

    提高PHP编程技术的方法 下面介绍的是提高PHP编程技术的几种方法. 1.PHP标签 我知道有些人写PHP代码的时候喜欢用缩略标签<? ?>,但是这可不是个好习惯,因为缩略标签在有些服务器 ...

  2. 【BZOJ4550】小奇的博弈 博弈论

    [BZOJ4550]小奇的博弈 Description 这个游戏是在一个1*n的棋盘上进行的,棋盘上有k个棋子,一半是黑色,一半是白色.最左边是白色棋子,最右边是黑色棋子,相邻的棋子颜色不同.   小 ...

  3. angular下如何绑定form表单的change事件

    ng-change = "formChange()" 不起作用 应该改为: onchanged = "angular.element(this).scope().form ...

  4. android studio 运行是,app标题栏不显示

    解决办法:让所有的活动都继承 AppCompatActivity就行了,如: public class FirstActivity extends AppCompatActivity{ ... }

  5. TADOConnection和TADQuery组件连接访问数据库总结

    首先先来简单了解一下TADOConnection控件和TADOQuery控件作用,如下图: 好了简单对这两个控件有了一个初步的认识了,下面我们就通过两种形式来进行访问数据库:第一种是通过手动配置不需要 ...

  6. OracleUNDO

    UNDO作用 数据的回滚 一致性读 表的闪回(事务,查询的闪回....) 失败会话的恢复 数据的回滚 SQL> rollback; 回滚的过程就是从回滚段里拿到刚刚执行的这条语句产生的回滚,然后 ...

  7. ORACLE_SID的查找

    SID是System IDentifier的缩写,而ORACLE_SID就是Oracle System Identifier的缩写,在Oracle系统中,ORACLE_SID以环境变量的形式出现,在特 ...

  8. Java RTTI and Reflection

    Reference: Java编程思想 java 反射(Reflect) Java系列笔记(2) - Java RTTI和反射机制 Java Reflection in Action, 有空再补 -- ...

  9. C#HTML与UBB(纯文本)之间的转换

    private string HtmlToUBB(string _Html)         {            _Html = Regex.Replace(_Html,"<br ...

  10. HTTP请求 蜘蛛的 user-agent

    百度爬虫 * Baiduspider+(+http://www.baidu.com/search/spider.htm”) google爬虫 * Mozilla/5.0 (compatible; Go ...