题解 P4753 【River Jumping】
这道神奇的模拟题,带一点贪心,其实蛮水的,仔细思考就能ac。
首先我们模拟一下样例2
发现其实答案0 1 2 3也可以,仔细观察题目,我们发现了一句有意思的话:允许输出任意一组答案。
所以就可使用xjb算法,复杂度为O(玄学)(逃
我们假装有两个小D;一个从0开始跳;一个从n开始跳; 只要距离大于s且没被跳过就跳,之所以说是贪心是因为 我们尽可能让小D1号多跳一点石头,小D2号少跳一点(当然可以反过来),最后扫一遍,如果有石头没跳,就输出“NO”,反之就输出“YES”,然后再按小D1号再到小D2号的顺序输出,核心如下
for(int i=;i<=n;i++)
if(i-pos>=s&&flag[i]==)
{flag[i]=;ans[now]=a[i];now++;pos=i;}
pos=n;
for(int i=n;i>=;i--)
if(pos-i>=s&&flag[i]==)
{flag[i]=;ans[now]=a[i];now++;pos=i;}
值得一提的是,起点0和终点n也算石头,但是0最后输出,详见代码。
#include<bits/stdc++.h>//万能头文件,noip不能用
#define maxn 100010
using namespace std;
int a[maxn],ans[maxn];//a记录石头序号,ans记录跳的顺序(即跳的石头序号)
bool flag[maxn];//记录可不可以跳
inline void read(int &x){//快读
x=;int f=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
x=x*+ch-'';
ch=getchar();
}x*=f;
}
int main(){
//memset(flag,0,sizeof(flag));
int n,m,s,x,pos=n,now=;//pos是当前位置,now是已跳石头个数
read(n);read(m);read(s);
for(int i=;i<=m;++i)
{read(x);flag[x]=;a[x]=i;}//flag==1代表可以跳
flag[]=;flag[n]=;
a[]=;a[n]=m+;//初始化,0和n也算石头
for(int i=;i<=n;i++)
if(i-pos>=s&&flag[i]==)
{flag[i]=;ans[now]=a[i];now++;pos=i;}
pos=n;
for(int i=n;i>=;i--)
if(pos-i>=s&&flag[i]==)
{flag[i]=;ans[now]=a[i];now++;pos=i;}//上已讲解
for(int i=;i<=n;i++)
if(flag[i]==) {printf("NO");return ;}//有石头没跳
printf("YES\n");
for(int i=;i<=now-;i++)
printf("%d ",ans[i]);
}
题解 P4753 【River Jumping】的更多相关文章
- P4753 River Jumping
P4753 River Jumping 题目描述 有一条宽度为 NN 的河上,小D位于坐标为 00 的河岸上,他想到达坐标为 NN 的河岸上后再回到坐标为 00 的位置.在到达坐标为 NN 的河岸之前 ...
- 「LuoguP4753」濑 River Jumping(贪心
Description 有一条宽度为 N 的河上,小D位于坐标为 0 的河岸上,他想到达坐标为 N 的河岸上后再回到坐标为 0 的位置.在到达坐标为 N 的河岸之前小D只能向坐标更大的位置跳跃,在到达 ...
- 【LGR-049】洛谷7月月赛
Preface Luogu八月月赛都结束了我才来补七月月赛 这次月赛还是很狗的,在绍一的晚上恰逢刮台风,然后直接打到一半断网了 结果都没有交上去GG 感觉这次难度适中,解法也比较清新自然吧,十分给个九 ...
- 题解报告:hdu 1087 Super Jumping! Jumping! Jumping!
Problem Description Nowadays, a kind of chess game called “Super Jumping! Jumping! Jumping!” is very ...
- 【题解】Crossing River
题目描述 几个人过河,每次过两人一人回,速度由慢者决定,问过河所需最短时间. 输入格式 输入t组数据,每组数据第1行输入n,第2行输入n个数,表示每个人过河的时间. 输出格式 输出t行数据,每行1个数 ...
- poj 3258 River Hopscotch 题解
[题意] 牛要到河对岸,在与河岸垂直的一条线上,河中有N块石头,给定河岸宽度L,以及每一块石头离牛所在河岸的距离, 现在去掉M块石头,要求去掉M块石头后,剩下的石头之间以及石头与河岸的最小距离的最大值 ...
- Crossing River 题解(贪心)
题目链接 题目大意 t组数据(t<=20) 给你n个人(n<=1000)过河,每个人都有权值,一条船,每次船最多运2个人,每次的花费为两个人的较大花费 求所有人都过河需要的最小花费 题目思 ...
- 2017-2018 ACM-ICPC Latin American Regional Programming Contest J - Jumping frog 题解(gcd)
题目链接 题目大意 一只青蛙在长度为N的字符串上跳跃,"R"可以跳上去,"P"不可以跳上去. 字符串是环形的,N-1和0相连. 青蛙的跳跃距离K的取值范围是[1 ...
- CF1077A Frog Jumping 题解
Content 在一个数轴上有一个动点,初始时在 \(0\) 这个位置上,接下来有若干次操作,对于第 \(i\) 次操作: 如果 \(i\) 是奇数,那么动点往右移 \(a\) 个单位. 如果 \(i ...
随机推荐
- dig请求和回应中的参数解释
; <<>> DiG 9.9.5-3ubuntu0.6-Ubuntu <<>> baidu.com dig这个程序的版本号和要查询的域名 ;; glob ...
- 利用Python爬取网页图片
最近几天,研究了一下一直很好奇的爬虫算法.这里写一下最近几天的点点心得.下面进入正文: 你可能需要的工作环境: Python 3.6官网下载 我们这里以sogou作为爬取的对象. 首先我们进入搜狗图片 ...
- TypeScript 之类型判断
在使用 Angular 做项目的时候,对 TypeScript 的类型判断不太熟练,为了方便查找,特意对 TypeScript 的类型判断做了简单梳理.文章只是 TS 官网的内容摘要,没有高深的知识, ...
- BAT面试题:使用数组实现一个简单的阻塞队列
这道题是我亲身经历的一道大厂面试题,非常值得分享! 这道题可以分为两个步骤进行编码解答,第一步是基于数组实现一个队列,第二步是实现线程阻塞. 如果是基于数组实现栈的数据结构,那么我们只需要一个指针进行 ...
- 07 Django REST Framework 解析器与渲染器
01-解析器 REST 框架包括一些内置的Parser类,允许你接受各种媒体类型的请求.还支持定义自己的自定义解析器,这使你可以灵活地设计API接受的媒体类型. 注意: 开发客户端应用程序时应该始终记 ...
- Element ui 日期限制范围
时间限定范围: <el-date-picker type="date" placeholder="选择日期" v-model="addForm. ...
- SequoiaDB 巨杉数据库
传统单点数据库的容量瓶颈,仅仅是分布式数据库所解决的问题之一.更重要的是在未来微服务化应用开发以及云化平台的趋势下,应用不再以“烟囱式”的中间件加数据库模式进行构建,而是采用数千甚至上万的微服务程序构 ...
- PHP开发高可用高安全App后端
基于thinkphp5开发的APP,涵盖阿里大于,七牛云图片上传,RestfulApi,短信验证, 需要联系我:QQ:1844912514
- Java基础--接口和抽象类的区别
任何不谈使用方法的空理论都是耍流氓 使用场景 · 如果你拥有一些方法并且想让它们中的一些有默认实现,那么使用抽象类吧(Java1.8中接口也可以这么做了) · 如果你想实现多重继承,那么你必须使用接口 ...
- axios拦截http拦截
一,判断登录页面 const routes = [ { path: '/', name: '/', component: Index }, { path: '/repository', name: ' ...