第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 建立火车站(二分)
作者:互联网
题目描述
新冠疫情,导致了各个城市之间物资输送的障碍。假设有N个城市在一条直线上,为了物资能顺利抵达各个城市,可以在路线上建立最多个数为K个暂时停靠站,由于火车在两个站台(城市也算站台)之间的距离越近,需要的总花费越少,因此我们需要让火车相邻两个站台之间的最大距离最小,求出距离L,2 ≤N ≤100000, 0 ≤K ≤100000,所有城市坐标小于等于10^12,且不存在负值。提醒: 城市坐标均为正整数,且停靠站只能建在整数坐标点上。
输入描述:
第一行输入城市个数N,可建立停靠站个数K, 第二行输入N个城市的坐标(不保证前一个城市坐标比后一个城市小)。
const int N=1e5+5;
int n,m;
int i,j,k;
ll a[N];
bool C(ll aim)
{
int cnt=k;
for(int i=2;i<=n;i++){
ll res=a[i]-a[i-1];
int cur=res/aim;
if(res%aim==0) cur--;
cnt-=cur;
}
if(cnt>=0) return true;
else return false;
}
int main()
{
//IOS;
while(~sdd(n,k)){
for(int i=1;i<=n;i++) sll(a[i]);
sort(a+1,a+1+n);
ll l=0,r=a[n]-a[1]+10,ans=r;
while(r>=l){
ll mid=l+r>>1;
if(C(mid)) r=mid-1,ans=mid;
else l=mid+1;
}
pll(ans);
}
//PAUSE;
return 0;
}
标签:ll,停靠站,int,城市,mid,ACM,个人赛,坐标,NEUQ 来源: https://blog.csdn.net/C_Dreamy/article/details/113446750