noip 2015 day2 t1 跳石头 二分
2015-11-26 19:43
239 查看
没办法,弱小的我就从水题开始吧!
今年noip2015 day2 的 t1 是比较常见的求最小值最大的题,这一些在训练指南第一章中曾多次出现, 其中lrj曾说“解决“最小值最大”的常用方法是二分答案”。所以在比赛的时候弱小的我唯一想到的也就是二分了。
接着便是核心便是对于判断函数的处理。
我当时采取的策略是从左往右扫,然后只删右边,不删左边,因为是从左往右扫,所以左边的石子一定能满足条件。
这样,这道题就出来了,最后说一句细心很重要,因为没有考虑最后一颗石子到终点的距离而失分。
就这样吧!第一次写博客,感觉不错。
#include<cstdio> #include<iostream> #include<cstring> #define rep(i,j,k) for(int i = j; i <= k; i++) using namespace std; int a[50001] = {0}; int num[50001] = {0}; int n, m, k; int read() { int s = 0; char c = getchar(); while( !isdigit(c) ) c = getchar(); while( isdigit(c) ){ s = s * 10 + c - '0'; c = getchar(); } return s; } bool chu(int x) { memcpy(num,a,sizeof(a)); int tot = 0; rep(j,1,m){ if( num[j] - num[j-1] < x ) { num[j] -= (num[j]-num[j-1]); tot++; } if( tot > k ) return 0; } return 1; } int main() { n = read(), m = read(), k = read(); int l = 0, r = 0xfffffff; rep(i,1,m+1){ if( i == m+1 ) a[i] = n; else a[i] = read(); if( i > k) r = min(r,a[i]-a[i-k-1]); } while( l < r ){ int mid = l + (r-l) / 2; if( l == r - 1 ) mid++; if( chu(mid) ) l = mid; else r = mid-1; } cout<<l<<endl; return 0; }
相关文章推荐
- 嵌入式Linux学习地址
- 使用python对url编码解码
- hdu 5567
- codelity--MaxProductOfThree
- 最大似然估计学习总结------MadTurtle 1. 作用 在已知试验结果(即是样本)的情况下,用来估计满足这些样本分布的参数,把可能性最大的那个参数clip_image002作为真实cl
- Spring事务传播行为和隔离机制
- iOS开发网络篇
- poj 3763:Slim Span
- iOS网络-05-AFNetwoking原理及常用操作
- 转: 学ppt的网址与素材
- 在子线程中使用runloop,正确操作NSTimer计时的注意点 三种可选方法
- JAVA不同层次模拟按键思路分享
- 再来一发迪杰斯特拉最短路。HDU2112
- 进击的KFC:UI(十)UITableView的编辑和移动
- IDEA + TOMCAT 远程调试
- 回溯法Matrix
- 全对偶测试法1
- dfs ancient go
- 如何将list转为json?
- 第十二周项目1 图基本算法库