题目链接:点击查看

题目大意:现在固定人初始时在点0处,现在我们需要跨过长度为n的一条河,到达对岸的点n+1处,给出m个木板,我们可以将这m个木板随意摆放,但相对位置不能改变,并且只能互相接触而不能互相重叠,现在人每次可以跳d个单位,问是否能够利用给出的m个木板到达河对岸,若能的话给出任意一种构造方案

题目分析:首先这个题目肯定是要贪心做的了,因为需要构造方案,所以我们还需要注意一个小细节,那就是全部木板都要使用,那么我们一开始可以维护一个sum和,维护一下所有木板的总长度,如果所有木板的总长度加上所有木板的间隔和人可以跳跃的乘积仍然小于河的长度,那必然是无法构造的了,其他情况都是有解的了

如果有解的话,我们直接贪心找就好了,假设我们的当前位置为pos,当前剩余木板的长度为sum,那么每次我们假设都先跳一次,然后再加上木板的长度,也就是判断一下这一次需不需要跳,只需要判断一下pos+sum+d-1是否能够直接到达n+1的位置,若能的话就先跳一次,然后其余的木板直接连成一个长木板拼在后面即可,若不能的话我们就先跳一步,然后拼上相应的木板,如此往复构造答案即可

这个题目最烦人的就是木板的长度中有些运算需要自己动手画画图,看看具体的关系,因为有的关系是需要减一的,大概就是这样了,简单贪心

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
#include<unordered_map>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=1e3+100;int a[N];int ans[N];int main()
{
//  freopen("input.txt","r",stdin);int n,m,d;scanf("%d%d%d",&n,&m,&d);int sum=0;for(int i=1;i<=m;i++){scanf("%d",a+i);sum+=a[i];}if(sum+(m+1)*(d-1)<n)//特判一下NO的情况return 0*printf("NO\n");printf("YES\n");int pos=0;//当前位置 for(int i=1;i<=m;i++){if(pos+sum+d-1<n+1)//如果不能直接跳到对岸pos+=d;else//如果可以直接跳到对岸,用剩下的木板拼成一整个长木板pos=n+1-sum;for(int j=pos;j<=pos+a[i]-1;j++)//构造答案ans[j]=i;pos+=a[i]-1;//实时更新当前位置sum-=a[i];//实时更新剩余木板的长度}for(int i=1;i<=n;i++)printf("%d ",ans[i]);return 0;
}

CodeForces - 1256C Platforms Jumping(贪心+构造)相关推荐

  1. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  2. CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的农场,其中'.'代表空地,'R'代表大米,现在有k只鸡需要分布在这个农场之中,需要满足以下条件: 每个方格都要被鸡占领 每只鸡至少占领一个方格 每只鸡占领 ...

  3. 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

    题目传送门 1 /* 2 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 3 */ 4 /**************************************** ...

  4. 2021年度训练联盟热身训练赛第五场 H题In-place Sorting+贪心构造

    题意: 给你n个小于101810^{18}1018的大数,问在可以再不改变序列位置,之改变数值中某数位的'9'变为'6'或将'6'变为'9',求的最终序列由小到大,且字典序最小. 题目: 链接:htt ...

  5. 【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)

    题干: LLLYYY很喜欢写暴力模拟贪心思维.某一天在机房,他突然抛给了队友ppq一 个问题.问题如下: 有一个函数f (): int f(int x){     int tmp = 0;     w ...

  6. 常规贪心构造题 最多能完成排序的块 II

    这是 LeetCode 上的  最多能完成排序的块 II ,难度为 困难. Tag : 「贪心」 这个问题和"最多能完成排序的块"相似,但给定数组中的元素可以重复,输入数组最大长度 ...

  7. CodeForces - 1494D Dogeforces(贪心+构造)

    题目链接:点击查看 题目大意:给出 nnn 个叶子结点和一个 n∗nn*nn∗n 的 LCALCALCA 矩阵,其中 LCALCALCA 表示的是最近公共祖先节点的权值,现在需要构造出一棵自顶向下权值 ...

  8. Codeforces 540B School Marks 【贪心构造】

    题目链接:Codeforces 540B School Marks Little Vova studies programming in an elite school. Vova and his c ...

  9. CodeForces - 967D Resource Distribution(贪心+二分+构造)

    题目链接:点击查看 题目大意:给出 n 个机器,每个机器可以处理 a[ i ] 的工作,现在有两个工作需要处理,工作量分别为 x1 和 x2,可以将一个工作分配给 k 个机器同时完成,需要满足: k ...

最新文章

  1. pure abstract class(什么是纯抽象类?)
  2. java timestamp时间差_关于datetime:如何在java中找到2个时间戳之间的日差
  3. IP插件:批量替换论文图片
  4. win10win键无反应_台式电脑开机主机没反应怎么办 电脑开机主机没反应解决【详解】...
  5. 英雄联盟怎么解除小窗口_英雄联盟手游怎么加好友_英雄联盟手游怎么加好友一起玩_资讯...
  6. 洛谷 P1356 数列的整除性
  7. js时间搓化为今天明天_来揭秘化妆品为啥会搓泥?
  8. @autowired注解原理_Spring框架第二谈:IOC,xml配置文件给属性赋值,注解实现赋值...
  9. CSS中常见的6种文本样式
  10. 读者教育浏览器兼容解决方法
  11. 解决SVN安装语言包后无法选择中文的问题
  12. WiFi 模块AT指令集整理
  13. gis坐标北京54转WGS84坐标系
  14. 什么是联合概率分布?
  15. HDOJ 5142 NPY and FFT 水
  16. (HTML+CSS+JS)仿小米官网首页 含源码
  17. 游园惊梦--记游第九届软博会
  18. 用python画星空-用python画星空源代码是什么?
  19. 201871010134-周英杰《面向对象程序设计(java)》第二周学习总结
  20. regopenkeyexfailed什么意思_外置网卡驱动安装出现RegOpenKeyEx Failed,怎么回事?

热门文章

  1. 基于session认证
  2. 搭建K8s集群(二进制方式)-搭建步骤介绍
  3. 服务拆分-案例Demo
  4. 手写自己的MyBatis框架-核心对象
  5. 注解能力ApplicationContext作为 IoC 容器示例
  6. SpringMVC异常处理机制-异常处理的思路
  7. Spring Schedule关闭订单
  8. 图的定义存储和遍历(一级)
  9. linux电视改安卓,mstar安卓智能电视方案源代码常用修改
  10. oracle数据结构是什么意思,Oracle数据结构知多少(一)