社区讨论

50pts 求调

P14915「QFOI R3」算法竞赛参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mjppk62m
此快照首次捕获于
2025/12/28 20:31
2 个月前
此快照最后确认于
2026/01/01 10:10
2 个月前
查看原帖
rt,二分答案,不知道怎么就炸了。
CPP
#include<bits/stdc++.h>
#define ll long long
#define db double
#define vec vector
#define pb push_back
#define pll pair<ll,ll>
#define mkp make_pair
#define il inline
#define endl "\n"
using namespace std;
const ll mod=998244353;
const ll inf=1e18;
ll n,k,d,a[100005];
bool ck(ll x){
	ll p=x*k;
	if(p<n) return 0;
	ll t=p-n,now=1,rt=0;
	for(ll i=2;i<=n;i++){
		if(now==k||now==0){
			now=1;
		}else{
			if(a[i]-a[i-1]>d){
				if((k-now)*d>=(a[i]-a[i-1])){
					rt+=k-now-1,now=0;
				}else{
					rt+=k-now,now=1;
				}
			}else now++;
		}
	}
	return rt<=t;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>k>>d;
    for(ll i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
	ll l=0,r=1e13,ans=0;
	while(l<=r){
		ll md=(l+r)>>1;
		if(ck(md)) r=md-1,ans=md;
		else l=md+1;
	}
	cout<<k*ans-n<<endl;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...