CF1121C 模拟

时间:2022-08-28 12:11:46

恶心场恶心题,,round千万不能用库函数的。。

/*枚举时间轴t,r是当前完成比例,
记录每个测试的开始时间si,如果有t-si等于r,那么这个测试就标记一下
优先队列存储每个测试,按照si+ai的顺序升序排列,一旦完成就出队,更新测试率,加入新元素即可
*/
#include<bits/stdc++.h>
#include<queue>
using namespace std;
struct node{
int s,a;
}p[];
priority_queue<node> q;
bool operator<(const node & x,const node &y){
return x.s+x.a>y.s+y.a;
}
int n,k,t,r[*];
int main(){
cin>>n>>k;
for(int i=;i<=n;i++)
cin>>p[i].a;
int id=,f=;
while(q.size()<k){
if(id==n)break;
p[++id].s=;
q.push(p[id]);
}
for(t=;t<=*;t++){
while(!q.empty()){
node tmp=q.top();
if(tmp.a+tmp.s==t){
q.pop();
f++;
//cout<<round(100*f/n)<<endl;
}
else break;
}
while(q.size()<k){
if(id==n)break;
p[++id].s=t;
q.push(p[id]);
}
r[t]=100.0*f/n+0.5;
} int ans=;
for(int i=;i<=n;i++){
for(int j=p[i].s;j<p[i].s+p[i].a;j++)
if(r[j]==j-p[i].s+){
ans++;break;
}
}
cout<<ans<<endl;
return ;
}