社区讨论
50分求调,WA4和7
P14915「QFOI R3」算法竞赛参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mkcbyr4r
- 此快照首次捕获于
- 2026/01/13 16:29 上个月
- 此快照最后确认于
- 2026/01/13 16:29 上个月
CPP
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N = 1e5+10;
ll n,k,d,cnt;
ll a[N];
int main(){
cin>>n>>k>>d;
for(int i = 1; i <= n; i++) cin>>a[i];
sort(a+1,a+1+n);
//for(int i = 1; i <= n; i++) cout<<a[i]<<" ";
//cout<<endl;
ll l=1,r=1,peoz=0;//人数增量
while(l <= r && l <= n && r <= n){
//cout<<l<<" "<<r<<" "<<cnt<<endl;
if(r == n && a[r]-a[l] <= d){cnt += k-(r-l+1); break;}
if(l == r){r++; continue;}
if(r-l+1+peoz == k && a[r]-a[l] <= d){l = ++r; cnt += peoz; peoz = 0; continue;}
if(a[r] - a[l] <= d) r++;
else{//>d
if(d == 0){cnt += k-(r-l); peoz = 0; l = r; continue;}
peoz = (a[r]-a[l]) / d;
if((a[r]-a[l]) % d == 0) peoz--;//间隔刚好整数,模拟一下就懂
if(peoz+2 > k){//l和r差太多不能在一队
cnt += k - (r-l+1-1);//r不算要-1
l = r;
peoz = 0;
}
else if(peoz+2 == k){cnt += peoz; l = ++r; peoz = 0;} //刚好凑一队
else l = ++r;//凑不满一队
}
}
cout<<cnt<<endl;
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...