hdoj 1434 幸福列車【模擬】

幸福列車

Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 2162    Accepted Submission(s): 666


Problem Description
一批幸福的列車即將從杭州駛向幸福的終點站——溫州,身爲總列車長的linle有一些奇怪的癖好。

他會記錄下全部乘客的名字(name)和他們的人品值(RP),根據這些將他們排序,並不時地從某輛列車裏踢出人品最不好(RP值最低)的一個人,當兩個人人品一樣不好時,他就會踢出名字難聽的人(linle認爲按字典順序,排在越在後面的人名字越難聽)。

當然出於列車行駛需要,他還會不時的發佈一些命令,比如讓某個乘客上車,合併某兩輛列車等。

linle的上一任祕書***因爲不能高效地執行他的這些命令而被炒魷魚,他現在正在尋覓新的祕書人選,你能不能勝任呢?(謝絕男士,待遇豐厚~~~)
 

Input
本題包含多組測試,請處理到文件結束。
對於每一組測試,第一行包含兩個整數 N ,M ,表示一共有N( N<=10000 ) 輛列車,執行M( M<=10000 )次操作。
接下來有 N (從1開始記數)輛列車的信息,每輛列車先有一個數字 Xi(1 <= Xi <= 100 ),表示該列車有Xi個乘客,接下來Xi行乘客信息,每個乘客包含名字(20個字符以內,不包含空白符)和人品(0<= RP <=30000)。
再接下來有 M 行操作信息,一共有3種操作,分別爲

GETON Xi name RP 表示有一個叫name的人品爲RP的人登上第Xi列車

JOIN Xi Xj 表示有將第Xj輛列車合併到Xi輛列車

GETOUT Xi 表示從第Xi輛列車踢出一個人品最差的人

測試數據保證每個操作均合法,即不會將已經被合併到其他列車的列車再進行合併,也不會從一輛空列車裏踢出乘客
 

Output
對於每個 GETOUT 命令,輸出被踢出的那個人的名字
 

Sample Input
3 5 2 xhd 0 zl 1 2 8600 1 ll 2 1 Ignatius 3 GETOUT 1 JOIN 1 2 GETOUT 1 GETON 3 hoho 2 GETOUT 3
 

Sample Output
xhd zl hoho
Hint
Huge input, scanf is recommended.
 

Author
linle
 

Source
 

Recommend
lcy
 

Statistic | Submit | Discuss | Note


代碼:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
int n,m;
char c[50];
struct node
{
	char name[25];
	int pb;
	bool friend operator < (node a,node b)
	{
		if(a.pb==b.pb)
		{
			return strcmp(a.name,b.name)<0;
		}
		return a.pb>b.pb;
	}
}a,temp;
int main()
{
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		int t=1;
		priority_queue<node>q[10005];
		while(n--)//下次能少用for,就不用,考試就是坑到這了! 
		{
			int u;
			scanf("%d",&u);
			while(u--)
			{
				scanf("%s%d",a.name,&a.pb);
				q[t].push(a);
			}
			t++;
		}
		while(m--)
		{
			scanf("%s",c);
			if(strcmp(c,"GETON")==0)
			{
				int u;
				scanf("%d%s%d",&u,a.name,&a.pb);
				q[u].push(a);
			}
			else if(strcmp(c,"JOIN")==0)
			{
				int u,v;
				scanf("%d%d",&u,&v);
				while(!q[v].empty())
				{
					q[u].push(q[v].top());
					q[v].pop();
				}
			}
			else if(strcmp(c,"GETOUT")==0)
			{
				int u;
				scanf("%d",&u);
				temp=q[u].top();q[u].pop();
				printf("%s\n",temp.name);
			}
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章