CCF 201709-2

priority_queuepq”:这个pq是数据越大优先级越高越先出队的队列。由于出队元素并不是最先进队的元素,出队的方法由                                                 queue的front( )变为了top( )。

                                       eg. priority_queue ,greater > pq;此为从小到大优先出队

#include
#include
#include
using namespace std;
struct teacher{
	int no;            //钥匙号 
	int time;          //取还时间 
	int flag;          //取为1,还为0      
	bool operator < (const teacher &u) const{//重载<操作符。可以对两个teacher使用<操作符进行比较
	                                               //为了优先队列的排序把小的放前面 
		if(time!=u.time)  return time>u.time;     //时间节点大的放后面 
		else if(flag!=u.flag)  return flag>u.flag;  // 先还后取 
		else return no>u.no;                        //优先钥匙号码小的  
	}
};
int a[1001];
priority_queue q;
int main(){
	int n,k,w,s,c;
	teacher t;
	cin>>n>>k;
	while(k--){
		cin>>w>>s>>c;
		t.no=w;
		t.flag=1;
		t.time=s;
		q.push(t);
		t.flag=0;
		t.time=s+c;
		q.push(t);
	}
	for(int i=1;i<=n;i++)
	a[i]=i;
	while(!q.empty()){
		t=q.top();
		q.pop();
		if(t.flag==1) {                 //取钥匙 
		for(int i=1;i<=n;i++)
		if(t.no==a[i])
		{
		 a[i]=-1;
		 break;    
       	}
        }
        if(t.flag==0) {                         //还钥匙 
        for(int i=1;i<=n;i++)
        if(a[i]==-1){
        	a[i]=t.no;
        	break;
		} 
	}    
	}
	for(int i=1;i

 

你可能感兴趣的:(CCF)