博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NOIP 2015[D2 T1] 跳石头
阅读量:5822 次
发布时间:2019-06-18

本文共 1200 字,大约阅读时间需要 4 分钟。

这里写图片描述

 

 

看到这个题,想到了二分答案。用二分的方法枚举最小距离x,和前面石块之间距离(变化)大于这个距离的石块就去掉,把去掉的石块数和m作比较,来变换x,最后找到答案;
但是,第一次写的时候,没有想到如果前面的石块被去掉,那么后面的石块在判断距离时,就会受到影响,并不是一成不变的。结果只得了10 fen ;
Besides,写一个正确的二分是很困难的对我来说,因为我记好的板子有时对有时错。如果有大神对二分精通,很虔诚的向您请教。

下面是ac代码

#include
#include
#include
#include
#include
#include
#include
using namespace std;int len,n,m;int a[50009],d[50009]; int check(int x){ int t=0,last=0;//last记录未被去掉的前一个石块的位置。 for(int i=1;i<=n;i++) { if(a[i]-last
>1; if(check(mid)>m) r=mid; //如果去掉的石块大于m,此时答案一定不可以,r=mid,所以最终的r一定不是答案就将答案x向小了枚举。 else l=mid; } printf("%d\n",l);//r一定不是答案,l一直向右逼近,最终到最优解。 return 0;}
#include
#include
#include
#include
#include
#include
#include
using namespace std;int len,n,m;int a[50009],d[50009]; int check(int x){ int t=0,last=0; for(int i=1;i<=n;i++) { if(a[i]-last
>1; if(check(mid)<=m) l=mid+1; else r=mid-1;//mid是不符合的且偏大,向左移得到最优解 }//因为要求的是满足的最大的,所以要从不满足且偏大的向左移一点点,如果符合,就是最优解了。 printf("%d\n",r); return 0;}

转载于:https://www.cnblogs.com/dfsac/p/7587912.html

你可能感兴趣的文章
Electric Fence(皮克定理)
查看>>
nvl 在mysql中如何处理
查看>>
MyEclipse 快捷键
查看>>
快速傅里叶变换FFT
查看>>
大数据常用基本算法
查看>>
JavaScript学习笔记(十三)——生成器(generator)
查看>>
hibernate保存失败
查看>>
MySQL增量订阅&消费组件Canal POC
查看>>
Sqlite多线程
查看>>
数据结构-时间复杂度
查看>>
对象与字符串相互转换
查看>>
[NOIp2017提高组]小凯的疑惑
查看>>
《C程序设计语言》练习1-5
查看>>
$\frac{dy}{dx}$ 是什么意思?
查看>>
Go开发之路(目录)
查看>>
RHEL6.5安装成功ORACLE11GR2之后,编写PROC程序出错解决方法
查看>>
(50)与magento集成
查看>>
Ubuntu设置python3为默认版本
查看>>
日期Calendar/Date的用法
查看>>
JsonCpp 的使用
查看>>