http://codeforces.com/gym/101028/problem/I

题意:给你n个洞,k个布条,问布条能贴到所有洞时的最小值。

题解:二分答案,因为答案越大就越容易满足条件。

技巧:两种judge写法:常规与upper_bound,嗯,就是有种可以upper_bound的感觉。

坑:VS提示upper_bound出错但是代码能ac Orz//_DEBUG_ERROR2("invalid iterator range", _File, _Line);百度不到为啥。。最后发现

 pos = upper_bound(a + pos + 1, a + n + 1, a[pos] + mid - 1) - a;改成
 pos = upper_bound(a + pos , a + n + 1, a[pos] + mid - 1) - a;就好了。有点意思

ac代码:正常写法

#define    _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int maxn = 1e5 + ;
int a[maxn];
int n, k;
bool judge(int x) {
int p = , cnt = ;
for (int i = ; i <= n; i++) {
if (p < a[i]) {
cnt++;
p = a[i] + x - ;
if (cnt == k) {
if (p >= a[n])return ;
else return ;
}
if (p >= a[n])return ;
}
}
return ;
}
int main() {
int t;
cin >> t;
while (t--) { cin >> n >> k;
for (int i = ; i <= n; i++) {
scanf("%d", &a[i]);
}
int l = , r = a[n];
int mid;
while (l <= r) {
mid = l + r >> ;
if (!judge(mid)) l = mid+;
else r = mid-; }
cout << l << endl;
} }

简化版:

#define    _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<vector>
#include<algorithm>
#include<stdio.h>
using namespace std;
const int maxn = 1e5 + ;
int a[maxn];
int n, k;
bool judge(int x) {
int pos = , cnt = ;
for (int i = ; i <= k; i++) {
pos = upper_bound(a + pos + , a + n + , a[pos] + x - ) - a;
}
if (pos > n)return ;
return ;
}
int main() {
int t;
cin >> t;
while (t--) { cin >> n >> k;
for (int i = ; i <= n; i++) {
scanf("%d", &a[i]);
}
int l = , r = a[n];
int mid;
while (l <= r) {
mid = l + r >> ;
int pos = ;
for (int i = ; i <= k; i++) {
pos = upper_bound(a + pos + , a + n + , a[pos] + mid - ) - a;
}
if (pos>n) r = mid - ;
else l = mid + ; }
cout << l << endl;
} }

Gym - 101028I March Rain 二分的更多相关文章

  1. 2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分

    题目链接:http://codeforces.com/problemset/gymProblem/101028/I I. March Rain time limit per test 2 second ...

  2. Codeforces Gym 100425A Luggage Distribution 二分 数学

    A - Luggage DistributionTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...

  3. Code Forces Gym 100886J Sockets(二分)

    J - Sockets Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Valera ...

  4. Gym - 100851L:Landscape Improved (二分+单调性)

    题意: 一个宽度为N的网格图,i上有h[i]高的方块.现在你有W个方块,问怎么放使得最终的最高点最高.   当一个格子的下方,左下方和右下方都有方块那么久可以把方块放到这个格子上.最左端和最右端不能放 ...

  5. Gym 100971D Laying Cables 二分 || 单调栈

    要求找出每个a[i],找到离他最近而且权值比它大的点,若距离相同,输出权利最大的那个 我的做法有点复杂,时间也要500+ms,因为只要时间花在了map上. 具体思路是模拟一颗树的建立过程,对于权值最大 ...

  6. 【Codeforces】Gym 101608G WiFi Password 二分+线段树

    题意 给定$n$个数,求有最长的区间长度使得区间内数的按位或小于等于给定$v$ 二分区间长度,线段树处理出区间或,对每一位区间判断 时间复杂度$O(n\log n \log n)$ 代码 #inclu ...

  7. Gym 100883J palprime(二分判断点在凸包里)

    题意:判断一堆小点有多少个在任意三个大点构成的三角形里面. 思路:其实就是判断点在不在凸包里面,判断的话可以使用二分来判断,就是判断该点在凸包的哪两个点和起点的连线之间. 代码: /** @xigua ...

  8. Gym - 101981B Tournament (WQS二分+单调性优化dp)

    题意:x轴上有n个人,让你放置m个集合点,使得每个人往离他最近的集合点走,所有人走的距离和最短. 把距离视为花费,设$dp[i][k]$表示前i个人分成k段的最小花费,则有递推式$dp[i][k]=m ...

  9. Book Borders (Gym - 101480B)(二分)

    题目链接 题解:用二分查询一下每次满足长度的下一个加上它的长度. #include <bits/stdc++.h> using namespace std; typedef long lo ...

随机推荐

  1. trim思考

    今天发现后台订单商品名称没有的时候出现了HTML代码,然后看了一下源代码(下图是简化版本的) <?php $name = trim('<span style="font-weig ...

  2. error:undefined reference to 'net_message_processor::net_message_processor()'

    net_message_processor是我自己定义的一个类,文件名称分别是net_message_processor.h  & net_message_processor.cpp 和CCD ...

  3. form enctype:"multipart/form-data",method:"post" 提交表单,后台获取不到数据

    在解决博问node.js接受参数的时候,发现当form中添加enctype:"multipart/form-data",后台确实获取不到数据,于是跑到百度上查了一下,终于明白为什么 ...

  4. Spark-scala-API

    1.sc.version2.集群对象:SparkContext:获得Spark集群的SparkContext对象,是构造Spark应用的第一步!SparkContext对象代表 整个 Spark集群, ...

  5. 【RF库测试】set variable if

  6. [Maven]Maven中的一些基本概念

    Pom文件中的groupId.artifactId.version和name,这三个元素定义了一个项目的基本的坐标,在Maven世界中,任何的jar.pom或者war都是基于这些基本的坐标惊醒区分. ...

  7. 3dmax导出模型使用相对路径读取纹理贴图

    Shift+T快捷键打开“资源跟踪”窗口

  8. Hadoop集群三种作业调度算法介绍

    Hadoop集群中有三种作业调度算法,分别为FIFO,公平调度算法和计算能力调度算法 先来先服务(FIFO) Hadoop中默认的调度器FIFO,它先按照作业的优先级高低,再按照到达时间的先后选择被执 ...

  9. 偶值得纪念的一天-初学习C#

    今天好悲催啊,竟然生病啦,不过一切还好! 今天我们在云和数据学习的第二天,上午没有听课,似乎学习了变量的定义以及命名方法,还有变量类型的显隐式转换:我感觉这些还是在之前看书知道啦把,因此看啦看老师做的 ...

  10. Javascript学习笔记--理解prototype

    prototype和closure是js中两个不好搞懂的概念,幸好网上有很多相关的文章,在网上查了一遍以后,总是是觉得有点理解了.今天先说说prototype. 之前一直被ajax in action ...