题解 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 ...
随机推荐
- 我的Windows日常——你的小电影藏好了吗?
Hello! everybody! 记得大三,第一次上我们某主任的课(我是计算机学部的),某主任上课的第一件事,点名,第二件事,忽悠我们. 具体忽悠步骤如下: 某:”同学们,这里有 ...
- lombok使用
下载地址 链接:https://pan.baidu.com/s/19Rz7sgasVv5Gc7vw1A4whA 提取码:6bgg lombok的安装: 使用lombox是需要安装的,如果不安装,IDE ...
- ASP.NET Core 2.1与2.2 SignalR CORS 跨域问题
将 SignalR 集成到 ASP.NET Core api 程序的时候,按照官方 DEMO 配置完成,本地访问没有问题,但是发布之后一直报跨域问题,本地是这样设置的: Asp.net core 2. ...
- FreeHttp1.1升级说明
一.升级方法 下载新版本插件 https://files.cnblogs.com/files/lulianqi/FreeHttp1.1.zip 或 http://lulianqi.com/file/ ...
- 接口list
List接口介绍 java.util.List 接口继承自 Collection 接口,是单列集合的一个重要分支,习惯性地会将实现了 List 接口的对象称为List集合. List接口特点: 它是一 ...
- Redis的常见用法
Redis redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- Linux下ansible的group模块
一.概述 group 模块可以帮助我们管理远程主机上的组. 二.常用参数 name参数:必须参数,用于指定要操作的组名称. state参数:用于指定组的状态,两个值可选,present,absent, ...
- springmvc的前端控制器
<servlet> <servlet-name>xxx</servlet-name> <servlet-class>org.springframewor ...
- Conda常见命令
Anaconda,Miniconda,Conda,Pip的区别: Anaconda:用于科学计算的python发行版,里面预装好了conda,某个版本的python,众多packages,科学计算工具 ...
- 第一章 Python基本语法元素
1.1 程序设计基本方法 计算机的概念: (1)功能性:对数据的操作,表现为数据计算.输出输出处理和结果存储等 (2)可编程性:根据一系列指令自动地.可预测地.准确地完成操作者的意图. 计算机的发 ...