[HNOI2003]操作系统,洛谷之提高历练地,堆

正题

      第二题:[HNOI2003]操作系统

      我们看到了“优先级最高”这几个字,我们就想到了用堆来维护

bool operator<(const node y)const{
	if(rank==y.rank) return begin>y.begin;
	return rank

我们这样就可以来维护优先级高的在前面先做,优先级一样高的先做到达时间早的!!

       每次来一个元素,我们看一下能把前面一个元素先做完,如果可以,那么就做完它;否则,无论是否优先级高还是低,加入队列,在判断先做哪个,,这样思路就会很明了,后面过一遍把每个都做一遍即可。

#include
#include
#include
#include
#include
using namespace std;

struct node{
	int x,begin,last,rank;
	bool operator<(const node y)const{
		if(rank==y.rank) return begin>y.begin;
		return rankf;

int main(){
	int a,b,c,d;
	int now=0;
	while(scanf("%d %d %d %d",&a,&b,&c,&d)!=EOF){
		while(!f.empty()){
			node tp=f.top();
			f.pop();
			if(now+tp.last<=b){
				now+=tp.last;
				printf("%d %d\n",tp.x,now);
			}
			else {
				tp.last-=b-now;
				now=b;
				f.push(tp);
				break;
			}
		}
		f.push((node){a,b,c,d});
		now=b;
	}
	while(!f.empty()){
		node tp=f.top();
		f.pop();
		now+=tp.last;
		printf("%d %d\n",tp.x,now);
	}
}

你可能感兴趣的:([HNOI2003]操作系统,洛谷之提高历练地,堆)