社区讨论

30 pts #1#3#5 玄关求条!!

P2278[HNOI2003] 操作系统参与者 1已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mj3m8uhv
此快照首次捕获于
2025/12/13 09:27
3 个月前
此快照最后确认于
2025/12/14 18:05
3 个月前
查看原帖

代码如下

CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2250500;
struct node{
	int a,b,c,d;
	bool operator < (const node& n) const{
		if(n.d!=d) return d<n.d;
		else return a>n.a; 
	}
}f[MAXN];
priority_queue <node> q;
int main(){
	int x;
	int t,pre=0;
	while(cin>>x){
		f[x].a=x;
		cin>>f[x].b>>f[x].c>>f[x].d;
		t=f[x].b;
		while(!q.empty()){
			node p=q.top();
			if(max(pre,p.b)+f[p.a].c<t){//有时间执行
				cout<<p.a<<" "<<max(pre,p.b)+f[p.a].c<<endl;
				pre=max(pre,p.b)+f[p.a].c;
				q.pop();
			}else{//没有时间执行或执行会被中断
				f[p.a].c-=(t-max(pre,f[p.a].b));
				pre=t;
				break;
			}
		}
		q.push(f[x]);
	}
	while(!q.empty()){
		node p=q.top();
		cout<<p.a<<" "<<max(pre,f[p.a].b)+f[p.a].c<<endl;
		pre=max(pre,p.b)+f[p.a].c;
		q.pop();
	}
	return 0;
}
感谢大佬

回复

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

正在加载回复...