2 3 101 102 103 3 201 202 203 ENQUEUE 101 ENQUEUE 201 ENQUEUE 102 ENQUEUE 202 ENQUEUE 103 ENQUEUE 203 DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 2 5 259001 259002 259003 259004 259005 6 260001 260002 260003 260004 260005 260006 ENQUEUE 259001 ENQUEUE 260001 ENQUEUE 259002 ENQUEUE 259003 ENQUEUE 259004 ENQUEUE 259005 DEQUEUE DEQUEUE ENQUEUE 260002 ENQUEUE 260003 DEQUEUE DEQUEUE DEQUEUE DEQUEUE STOP 0
Scenario #1 101 102 103 201 202 203 Scenario #2 259001 259002 259003 259004 259005 260001
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
const int N = 1000005 ;
struct NODE
{
int pri1 , pri2 , id ;
friend bool operator<(NODE aa , NODE bb){
if(aa.pri1 == bb.pri1)
return aa.pri2>bb.pri2 ;
return aa.pri1 > bb.pri1 ;
}
};
int pri[1005] , num[1005] ;
int team[N] ;
void work()
{
priority_queue<NODE> q;
NODE now ;
int id , k =0 ;
char str[100];
memset(num , 0 ,sizeof(num)) ;
memset(pri , -1 , sizeof(pri)) ;
while(scanf("%s",str) > 0){
if(str[0] == 'S')
break;
if(str[0] == 'E')
{
scanf("%d",&id);
now.id = id ;
now.pri2 = k ;
if(team[id] == -1 )
now.pri1 = k ;
else if(pri[ team[id] ] == -1 ){
now.pri1 = k ;
pri[ team[id] ] = k ;
num[ team[id] ]++;
}
else now.pri1 = pri[ team[id] ] , num[ team[id] ]++;;
q.push( now ) ; k++;
}
else{
now = q.top() ; q.pop() ;
num[ team[now.id] ]--;
if(num[ team[now.id] ]==0)
pri[ team[now.id] ] = -1 ;
printf("%d\n",now.id) ;
}
}
printf("\n");
}
int main()
{
int t , n , id , _cas = 0;
while(scanf("%d",&t)>0 && t ){
memset( team , -1 , sizeof(team));
for(int i = 0 ; i < t ; i++)
{
scanf("%d",&n) ;
while(n--){
scanf("%d",&id);
team[id] = i ;
}
}
printf("Scenario #%d\n",++_cas) ;
work();
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u010372095/article/details/47833483