由于原先的那个帖子沉了orz。。。
所以重发一遍
这是之前的求助帖
这是那道题
我的思路是:
读入的时候把距离存到优先队列里。
然后每次取出堆顶砍掉一半再放回去,作为在间隔最长的两个路标之中间擦入一个路标。然后 k−−
用 while 循环控制,直到 k=0 。
好像并没有问题?代码似乎也没有问题啊
结果就没过,下面是代码:
#include<bits/stdc++.h>
using namespace std;
priority_queue<int>juli;
int l,n,k,i,x,y;
int main(){
cin>>l>>n>>k;
for(i=0;i<n;i++){
cin>>x;
juli.push(x-y);
y=x;
}
while(k>0){
x=juli.top();
juli.pop();
if(x%2==0){x/=2;juli.push(x);}
else{
x=x/2+1;
juli.push(x);
}
k--;
}
cout<<juli.top();
return 0;
}
各位能帮蒟蒻看看吗?