AcWing 3176. 扫地机器人
原题链接
简单
作者:
术
,
2021-04-06 16:01:33
,
所有人可见
,
阅读 471
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+5;
int n,k;
int a[N];
int ans[N];
//区间大小为m,起点为l
int check(int m){
int l=0;
for(int i=1;i<=k;i++){
if(a[i]-m<=l){//m大小的区间,是否可以全部清理
if(a[i]<=l) l=a[i]+m-1;//若机器人在l范围内,则机器人向右最远的点为下一个l
else l=a[i]+m-(a[i]-l);//若不在边界内,
}
else return false;
}
if(l>=n) return true;
else return false;
}
int main()
{
cin>>n>>k;
int res=0;
for(int i=1; i<=k; i++)
{
cin>>a[i];
}
sort(a+1,a+k+1);
//找符合条件的最小区间大小
int l=1,r=n;
while(l<r){
int mid=l+r>>1;
if(!check(mid)) l=mid+1;
else r=mid;
}
cout<<2*(l-1);
//cout << "Hello world!" << endl;
return 0;
}
if(a[i]<=l) l=a[i]+m-1;
这里为什么要减1因为a[i] 是从1开始的
┭┮﹏┭┮我还以为是什么细节
hh