CF-1238 C.Standard Free2play
2024-09-03 23:07:31
题目大意:
有一个墙,高度为h,在每一个高度处都有一个踏板,有的踏板是隐藏着的,有的是伸出来的,小人站在h高度处(题目保证h高度处的踏板一定是伸出来的),这个小人每站到一个踏板上,就可以点一个开关,将他所在的踏板收回,并将下一个高度上的踏板改变状态。小人只能最多落下两层楼,如果从高度为x处落到高度为x-3处那就会摔的稀碎,当然你肯定不想让他摔死是不是,要是不想摔死就充钱!每充一块钱就能指定一个踏板并改变他的状态。现在问你最少充多少钱能不让小人摔死。
做法:贪心,从第一个挡板开始往下跳,如果下面一直没有挡板,那就一直往下跳,直到跳到有挡板的位置,我们先停在他的上一个高度处,所以现在的状态是,小人处于x高度处,x-1高度处有挡板,那么我们讨论x-2高度处有没有挡板:
1.如果x-2高度处有挡板,那么我们在x处按动开关,x和x-1高度处的挡板都收起,小人恰好落在x-2高度处的挡板,此时站在x-2高度处要考虑的问题又和站在x-1高度处要考虑的问题一样了
2.如果x-2高度处没有挡板,那很显然x和x-1处的挡板收起后小人就嗝屁了,所以我们冲一块钱,让x-1高度处的挡板收起来,然后再按动开关的时候x-1高度处的挡板恰好伸出,小人正好落上去,接下来的操作仍然相同。
综上所述,问题的焦点就在于x-1处挡板下面的那个挡板是和它紧挨着还是隔着一些高度。如果紧挨着就跳过这个问题,否则就冲一块钱。是不是很简单啊,老子想秃噜了头皮也没想出来,最后还是看了老外的代码,&#*%^&_*,果然年纪大了不中用了。
#include<iostream>
#include<cstdio>
#define maxn 200010
using namespace std;
int a[maxn],n,h,T;
int main(){
scanf("%d",&T);
while(T--){
int ans=;
scanf("%d%d",&h,&n);
for(int i=;i<=n;i++)scanf("%d",&a[i]);
a[++n]=;
for(int i=;i<=n;i++){
if(a[i]-a[i+]>)ans++;
else i++;
}
printf("%d\n",ans);
}
return ;
}
最新文章
- Lesson 17 Always young
- 【Android】一道Android OpenGL笔试题
- 在CentOS或RHEL防火墙上开启端口
- getServletPath getRequestURI getRequestURL区别
- windows在当前位置打开终端
- NSMutable sort排序
- Apache Spark源码走读之8 -- Spark on Yarn
- SPOJ COT3 Combat on a tree(Trie树、线段树的合并)
- 在滚动列表中实现视频的播放(ListView &; RecyclerView)
- PhpStrom 配置Xdebug
- So many good projects for studying C programming lanuage.
- DOS命令之----Netstat+Task以及相关使用
- MYSQL存储过程中的IN、OUT和INOUT
- javascript于&;quot;return obj === void 0&;quot;这样的书面理由和优势
- u盘烧写后实际容量变小了
- C#中的DateTime是值类型还是引用类型
- winhex中判断+MBR+DBR+EBR方法
- 用user-selection实现让页面上的内容不能被选中
- Ubuntu 16.04LTS 安装 MATLAB 2014B
- Aras SP9里打开自己写的网页。
热门文章
- vue-cil3 运行报错
- 【洛谷4585】[FJOI2015] 火星商店问题(线段树分治)
- .NET Core 内置的 System.Text.Json 使用注意
- 源码学习之Spring (系统架构简单解析)
- 《细说PHP》第四版 样章 第二章 PHP的应用与发展 2
- IT兄弟连 Java语法教程 综合案例
- JDBC进阶 元数据
- _NtCreateDebugObject(ntoskrnl.exe)函数逆向分析
- OpenGL光照3:光源
- SpringBoot捕获AccessDeniedException