社区讨论

60ptsMLE求条

P11289【MX-S6-T1】「KDOI-11」打印参与者 2已保存回复 4

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@mhk6x52j
此快照首次捕获于
2025/11/04 14:30
4 个月前
此快照最后确认于
2025/11/04 14:30
4 个月前
查看原帖
rt
CPP
#include<bits/stdc++.h>
#define ll long long
using namespace std;
struct fun{
    ll t;
    ll x;
    ll id;
};
bool cmp(fun aa,fun bb){
    return aa.x<bb.x;
}
fun a[222222];
priority_queue<ll,vector<ll>,greater<ll> >q1;//存空闲的 ,id从小到大排序 
priority_queue<pair<ll,ll>,vector<pair<ll,ll> >,greater<pair<ll,ll> > >q2;//存运行的 ,按结束时间从小到大排序 
priority_queue<ll,vector<ll>,greater<ll>>ans[222222];
int main(){
	//freopen("print4.in","r",stdin);
	//freopen("print11.ans","w",stdout);
    ll n,m;
    scanf("%lld%lld",&n,&m);
    for(ll i=1;i<=n;i++){
    	scanf("%lld%lld",&a[i].t,&a[i].x);
        a[i].id=i;
    }
    for(ll i=1;i<=m;i++){
    	q1.push(i);
	}
    sort(a+1,a+n+1,cmp);
    for(ll i=1;i<=n;i++){
    	while(!q2.empty()&&q2.top().first<=a[i].x){
    		q1.push(q2.top().second);
    		q2.pop();
    	}
		if(!q1.empty()){
			ans[q1.top()].push(a[i].id);
			q2.push({a[i].x+a[i].t,q1.top()});
			q1.pop();
		}else{
			ll minn=0x3f3f3f3f3f3f3f;
			while(!q2.empty()&&q2.top().first<=minn){
				minn=q2.top().first;
    			q1.push(q2.top().second);
			}
			ans[q1.top()].push(a[i].id);
			q2.push({minn+a[i].t,q1.top()});
			q1.pop();
		}
	}
    for(ll i=1;i<=m;i++){
    	printf("%d",ans[i].size());
        while(!ans[i].empty()){
        	printf(" %lld",ans[i].top());
        	ans[i].pop();
		}
        printf("\n");
    }
    return 0;
}

回复

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

正在加载回复...