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

本文共 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

你可能感兴趣的文章
Android--Service之绑定服务交互
查看>>
从程序员到项目经理(十八):不要试图和下属做朋友
查看>>
Android任务栈TaskStack
查看>>
UML类图几种关系的总结
查看>>
IOS7开发~新UI学起(三)
查看>>
走进AngularJs(七) 过滤器(filter)
查看>>
另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法
查看>>
设计模式-观察者模式
查看>>
开源数据库的最新市场份额
查看>>
利用Microsoft Sql Server Management studio 创建数据库的示例
查看>>
新挑战 新起航
查看>>
PI-利用SoapUI 测试web service的方法介绍
查看>>
str_replace使用
查看>>
[Head First设计模式]一个人的平安夜——单例模式
查看>>
Asp.Net Web API 2第四课——HttpClient消息处理器
查看>>
创建Android环境并且安装cordova
查看>>
图例解析四大UML关系【转】
查看>>
Lucene.net 基本示例 《第一篇》
查看>>
数据库水平切分的实现原理解析---分库,分表,主从,集群,负载均衡器...
查看>>
微信公共服务平台开发(.Net 的实现)4-------语音识别
查看>>