题意

https://vjudge.net/problem/CodeForces-1238C

您现在正在玩一个游戏,您初始在一个高度 h 的悬崖

悬崖沿壁高度为 1-h 的这些位置均有平台,平台有两种状态,被选中/不被选中,您可以认为只有被选中的平台才出现在这个悬崖上且你可以站在上面。

初始时有 n 个平台为被选中,保证平台 h 被选中,您每次可以进行一个操作,不妨假设您当前站在平台 x 处(此时平台 x 一定被选中),即让平台 x 变成未被选中,而平台x−1 变成相反的状态。

您非常的脆弱,所以不能跌落超过2的高度,比如您可以从高度为3的平台跌落到高度为1的平台,但不能从高度为3的平台跌落到地面

现在您想要回到地面,即高度为0

您可以使用一种魔力水晶,即其可以将任意一个平台修改成指定的状态。

现在希望您求出回到地面最少需要使用多少颗魔力水晶?

思路

题意简单来说就是踩在选中的平台可以按开关,使得紧挨着的下面那个平台状态反转,不能连续跳超过2个平台。

如果隔了很远才有一个平台,显然可以按一次开关下降一格,因为下面那个平台会由未选中反转到选中,所以可以踩。我们一直这样做,直到跳到选中的平台的上一个,设此时位置为x,且x和x-1是有平台的,下面的为x-1,x-2。

如果x-2有平台,那么可以按x的开关,然后就跳到x-2了。

如果x-2没有平台,那么按了x的开关后,跳的距离肯定是大于2的了,因为x-1也收回了平台。这种情况就死了,需要一个水晶使得x-1的状态先改为未选中,这样就可以像开始说的那样往下一步一步的跳,直到跳到有平台的上一格,那么情况又和上面一样了。

总结,除去第一个平台(h),往下跳,每遇到两个距离>1的平台(x-1有平台,x-2没有平台的情况),那么需要一个水晶,跳到x-2。否则就跳过这些平台,跳到x-3平台的上一格继续考虑。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
ll p[N];
int main()
{
std::ios::sync_with_stdio(false);
int q;
cin>>q;
while(q--)
{
ll h,n;
cin>>h>>n;
for(int i=1;i<=n;i++)
cin>>p[i];
ll cnt=0;
p[n+1]=0;
for(int i=2;i<=n;i++)
{
if(p[i]-p[i+1]>1)
cnt++;
else i++;
}
cout<<cnt<<endl;
}
return 0;
}

  

CodeForces 1238C(思维+贪心)的更多相关文章

  1. Buy Low Sell High CodeForces - 867E (思维,贪心)

    大意: 第i天可以花$a_i$元买入或卖出一股或者什么也不干, 初始没钱, 求i天后最大收益 考虑贪心, 对于第$x$股, 如果$x$之前有比它便宜的, 就在之前的那一天买, 直接将$x$卖掉. 并不 ...

  2. Codeforces 922 思维贪心 变种背包DP 质因数质数结论

    A #include <bits/stdc++.h> #define PI acos(-1.0) #define mem(a,b) memset((a),b,sizeof(a)) #def ...

  3. Codeforces 1093C (思维+贪心)

    题面 传送门 题目大意: 有一个长n(n为偶数)的序列a 已知a满足 \(a_1≤a_2≤⋯≤a_n\) 给出一个长度为\(\frac{n}{2}\) 的序列b,定义\(b_i=a_i+a_{n-i+ ...

  4. Sorted Adjacent Differences(CodeForces - 1339B)【思维+贪心】

    B - Sorted Adjacent Differences(CodeForces - 1339B) 题目链接 算法 思维+贪心 时间复杂度O(nlogn) 1.这道题的题意主要就是让你对一个数组进 ...

  5. Codeforces Round #768 (Div. 2) D. Range and Partition // 思维 + 贪心 + 二分查找

    The link to problem:Problem - D - Codeforces   D. Range and Partition  time limit per test: 2 second ...

  6. CodeForces - 158B.Taxi (贪心)

    CodeForces - 158B.Taxi (贪心) 题意分析 首先对1234的个数分别统计,4人组的直接加上即可.然后让1和3成对处理,只有2种情况,第一种是1多,就让剩下的1和2组队处理,另外一 ...

  7. 2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心

    2018-2019 ACM-ICPC, Asia Xuzhou Regional Contest- H. Rikka with A Long Colour Palette -思维+贪心 [Proble ...

  8. E. The Contest ( 简单DP || 思维 + 贪心)

    传送门 题意: 有 n 个数 (1 ~ n) 分给了三个人 a, b, c: 其中 a 有 k1 个, b 有 k2 个, c 有 k3 个. 现在问最少需要多少操作,使得 a 中所有数 是 1 ~ ...

  9. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

随机推荐

  1. U8隐藏的配置项

    数据表:accinformation 我使用了一个是否自动审核库存生成的单据,看看是否能解决调拨单自动生成的其他出入库单自动审核的功能.

  2. Consul初探-在深交之前先认识

    Consul 是什么? Consul 官方站点:https://www.consul.io/ 首先,官方介绍是:Consul 是一种服务网格的解决方案,在 Consul 中,提供了服务发现.配置.分段 ...

  3. springboot向elk写日志

    springboot里连接elk里的logstash,然后写指定index索引的日志,而之后使用kibana去查询和分析日志,使用elasticsearch去保存日志. 添加引用 implementa ...

  4. js-01-基础知识

    一.JS变量的声明.数据类型和变量的转换 1.js变量声明关键字:var 注意:a:js变量区分大小写: b:js中字符串可使用双引号,也可使用单引号: c:js中可声明同名变量,控制台不会报错,但后 ...

  5. zipalign的使用

    zipalign 是一个存档对齐工具,可为Android应用程序(.apk)文件提供重要的优化.目的是确保所有未压缩数据以相对于文件开头的特定对齐开始.具体来说,它会导致.apk中的所有未压缩数据(如 ...

  6. Android 监听手机锁屏的工具类

    自定义 ScreenListener package com.example.teagardenhd.Listener; import android.content.BroadcastReceive ...

  7. 团队项目之Scrum5

    小组:BLACK PANDA 时间:2019.11.25   每天举行站立式会议 提供当天站立式会议照片一张 2 昨天已完成的工作 2 实现文章展示页面 完善后台的编辑功能接口 今天计划完成的工作 2 ...

  8. InnoDB On-Disk Structures(五)-- Redo Log & Undo Logs (转载)

    1.Redo Log The redo log is a disk-based data structure used during crash recovery to correct data wr ...

  9. 论文阅读:EGNet: Edge Guidance Network for Salient Object Detection

    论文地址:http://openaccess.thecvf.com/content_ICCV_2019/papers/Zhao_EGNet_Edge_Guidance_Network_for_Sali ...

  10. MAC地址表(交换机)、ARP缓存表以及路由表(路由器)