LQ0101 扫地机器人二分
Posted 海岛Blog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LQ0101 扫地机器人二分相关的知识,希望对你有一定的参考价值。
题目来源:
题目描述
输入格式
第一行包含两个整数N 和K。
接下来K 行,每行一个整数Ai。1<=K<N<=100000,1<=Ai<=N。
输出格式
输出一个整数表示答案。
输入样例
10 3
5
2
10
输出样例
6
问题分析
用二分搜索来实现。
AC的C++语言程序:
/* LQ0101 扫地机器人 */
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 100000;
int n, k, a[N];
bool judge(int p)
int pos = 0;
for (int i = 0; i < k; i++)
if (a[i] - pos <= p)
if (a[i] <= pos)
pos = a[i] + p - 1;
else
pos += p;
else
return false;
return pos >= n;
int main()
cin >> n >> k;
for (int i = 0; i < k; i++)
cin >> a[i];
sort(a, a + k);
int l = 0, r = n;
while (l < r)
int mid = (l + r) / 2;
if (judge(mid)) r = mid;
else l = mid + 1;
cout << (l - 1) * 2 << endl;
return 0;
以上是关于LQ0101 扫地机器人二分的主要内容,如果未能解决你的问题,请参考以下文章