题目描述
牛牛最近在玩一种叫做跳跳棋的游戏,棋盘可以看成是一个一维的线性数组,编号从1到n+1n+1n+1。
一开始牛牛的棋子位于第1个格子,游戏的最终目的是将棋子移动到第n+1n+1n+1个格子。
棋盘1~n的每个格子都有一个“弹力系数”的权值pi​p_i​pi​​ 。
当棋子位于第i个格子时,它的下一步可以移动到[i−pi,i+pi][i-p_i,i+p_i][i−pi​,i+pi​]范围内的任意一个格子。
举例来说,假设第3个格子的弹力系数为2,那么牛牛下一步可以移动到第1,2,3,4,5格中的任意一格。
现在给定1n1~n1 n每格的弹力系数pip_ipi​。牛牛发现,好像有时由于棋盘的pip_ipi​设置不合理,导致游戏无法通关。
所以牛牛准备施展他神奇的魔法,他每次施展魔法都可以使得一个格子的弹力系数pi+1p_i+1pi​+1,他可以施展若干次魔法操作不同的格子,但是要求他不能够重复对一个格子施展魔法。

牛牛想要知道,为了使跳跳棋通关,他最少施展多少次魔法,并且他应该操作哪些格子。
请输出牛牛的最小操作次数,以及施展魔法的操作序列,操作序列的第i个数表示该次施展魔法的格子编号,由于答案不唯一,所以请你输出一个最小字典序的答案。

最小字典序指:在保证第1个数字尽可能小的前提下,保证第2个数字尽可能的小,然后在此前提下保证第3个数字尽可能的小…以此类推。


输入描述:
第一行输入一个正整数n表示跳跳棋的格子数目。
接下来输入一行n个非负整数pip_ipi​
表示跳跳棋前n个格子的弹力系数。

输出描述:
首先输出一个非负整数ans,表示少施展魔法的次数。
如果ans不为0,则再输出一行ans个整数表示需要施展魔法的格子编号,请给出一个最小字典序的答案。


示例1
输入
12
5 4 3 3 2 1 0 0 0 1 0 0

输出
5
4 8 9 10 12

说明
除了"4891012""4 8 9 10 12""4891012"这个操作的答案序列以外,"5891012","6891012""5 8 9 10 12","6 8 9 10 12""5891012","6891012"也同样是最小操作数下的答案。
但是"4891012""4 8 9 10 12""4891012"这个答案是字典序最小的,故输出"4891012""4 8 9 10 12""4891012"。

示例2
输入
8
0 1 0 1 0 1 0 1

输出
4
1 2 4 6

示例3
输入
5
0 0 0 0 0

输出
5
1 2 3 4 5

说明
本样例可以说明,不存在无解的情况,因为你至少可以令所有pip_ipi​ 全都+1。

示例4
输入
5
1 1 1 1 1

输出
0


备注:
对于202020%的测试数据,保证1≤n≤101≤n≤101≤n≤10
对于404040%的测试数据,保证10≤pi≤110≤p_i ≤110≤pi​≤1
对于100100100%的测试数据,保证1≤n≤105,0≤pi≤1001≤n≤10^5 ,0≤p_i≤1001≤n≤105,0≤pi​≤100


解题思路
这道题是一道贪心。

我们可以看出,往后走是没有任何的必要的。
因为你走是可以走到[i−pi,i+pi][i-p_i,i+p_i][i−pi​,i+pi​]中的任意一个点,那你走回去,再走回来,其实不如你直接往前走。

那这道题就可以很愉快的用贪心解决了,在用魔法之前竟可能的走到更前面,然后在跳最后一次的地方用一次魔法。

这时候可能会有人问:为什么这样一定可以呢?
因为它无论在什么地方使用魔法,都只能在原来的基础上多走一步,那肯定就是先找到能走到最远地方的最后一点,然后再那个地方用魔法。

然后我们只要在走的时候记录一下在那些地方用了魔法,在到终点之后输出出来就可以了。

题目要求要字典序最小,那我们不往后走,而且如果有两个地方都可以跳到最远点,就选前面的那个。


代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
int n,a[110000],num[110000],maxn,maxx;
void output(){printf("%d\n",num[0]);for(int i=1;i<=num[0];i++)printf("%d ",num[i]);
}
int main(){scanf("%d",&n);maxn=1,maxx=1;for(int i=1;i<=n;i++){scanf("%d",&a[i]);if(a[i])   {if(a[i]+i>maxn){maxn=a[i]+i;maxx=i;if(maxn>n){output();return 0;}}}else if(i==maxn) {num[++num[0]]=maxx;maxn++;maxx=maxn;if(maxn>n)output();  }}return 0;
}

【2020.10.17 牛客 普及组 模拟赛一】T2 牛牛的跳跳棋相关推荐

  1. 【10.17 牛客普及(一)】 牛牛的密码 题解

    [10.17 牛客普及(一)] 牛牛的密码 题解 题目 牛牛在注册不同的网站时,总是会使用不同的密码来保证他的账号安全. 为了保证他的密码强度,牛牛使用他的"字符串筛选器"来测试密 ...

  2. 【2020.11.2 洛谷团队赛 普及组 模拟赛】T2 U138390 三角形

    题目描述 现在工厂里有三根铁棒,分别长为 a , b , c a,b,c a,b,c,现在你可以对其中一些铁棒进行加长,但总的加长长度 不能超过L,问有多少种加长的方案使得加长后的铁棒可以构成三角形. ...

  3. 计蒜客信息学3月普及组模拟赛

    A. 断幺九 题目链接 分值:100 时间限制:1000ms 测试点数目:10 B. 锈湖 题目链接 分值:100 时间限制:2000ms 测试点数目:10 C. 图  题目链接 分值:100 时间限 ...

  4. DD 摆磁铁(计蒜客信息学8月普及组模拟赛)

    DD 摆磁铁 这道题来自 计蒜客信息学8月普及组模拟赛 普及组!! 把我一个TG选手看懵了 看来我要回去打普及了 题目大意 给出一个n个节点的树,要把树上给定的2*m个节点两两配对,两个节点配对的产生 ...

  5. 【10.22 牛客普及(三)】 牛半仙的妹子串 题解

    [10.22 牛客普及(三)] 牛半仙的妹子串 题解 题目 牛半仙有 n n n 个妹子. 牛半仙用对于每个妹子都有一个名字,并且给了每个妹子一个评分. 牛半仙的审美与名字有关,他想知道名字以某字母结 ...

  6. 1983. 【普及组模拟赛】手机(mobile)

    1983. [普及组模拟赛]手机(mobile) 题目描述 一般的手机的键盘是这样的: 要按出英文字母就必须要按数字键多下.例如要按出 x 就得按 9 两下,第一下会出 w,而第二下会把 w 变成 x ...

  7. 【计蒜客模拟赛系列】-计蒜客2021年8月普及组模拟赛

    提前:本文中部分代码和思路有借鉴或摘抄计蒜客官方题解 赛后总结 本次模拟赛的难度总算正常了些 个人战绩: 220/400,排名61 ,太弱了,一大堆AK爷 题目质量评价: 题目相比CSP-J还是简单了 ...

  8. 【jzoj】2018.1.30NOIP普及组——模拟赛D组

    @_@ 前言 写博客时间 2018/1/30 22:36. 感想:出数据的dalao我服! 正题 题目1:二项式展开式(jzoj2254) 输入一个整数,求展开(a+b)^n.展开方式为 (a+b)^ ...

  9. 【普及组模拟赛】家族

    题目描述 在一个与世隔绝的岛屿上,有一个有趣的现象:同一个家族的人家总是相邻的(这里的相邻是指东南西北四个方向),不同的家族之间总会有河流或是山丘隔绝,但同一个家族的人不一定有相同姓氏.现在给你岛上的 ...

最新文章

  1. Docker的使用(docker pull拉取镜像失败问题解决)
  2. 如何将OutputStream转换为InputStream?
  3. 微信在公众号增开了新广告位 这次是在图文消息头部
  4. [笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
  5. java注解封装默认值_Java注解默认值
  6. 小知识汇总----不断更新中...
  7. POJ 2823 Sliding Window
  8. 【Centos配置2】远程管理必备工具配置:ssh/vnc/webadmin
  9. 多分类f1分数_机器学习之分类模型评估总结
  10. Uva 10817 校长的烦恼
  11. LINUX PATH环境变量
  12. 知识蒸馏 | 综述: 网络结构搜索应用
  13. 解决SAP PI Cluster系统故障
  14. hashmap的底层
  15. 虚拟光驱DAEMONTools 3.47特别版/汇编版/珍藏版
  16. 用Java模拟斗地主游戏
  17. react:创建新项目
  18. LinuX 硬盘分区细节详谈
  19. elementui分页隐藏最后一页
  20. java毕业设计——基于java+Applet+access的综合测评系统设计与实现(毕业论文+程序源码)——综合测评系统

热门文章

  1. Ubuntu中运行unity
  2. JAVA 数组降序排列思路
  3. mui ajax 懒加载,MUI框架运用中遇见问题总结
  4. Access to XMLHttpRequest at ‘http://localhost:8081/api/account/doLogin‘ from origin ‘http://localhos
  5. 我当程序员一天,就多陪你一天吧
  6. Open vSwitch的安装与运行
  7. java内存溢出定位
  8. XYplorer 23多语言,最好的管理软件之一
  9. YUV_420_888数据裁剪
  10. s1 Linux 硬件基础