hdu1871无题(优先级队列)

无题

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1568    Accepted Submission(s): 694

Problem Description
就要复试了,外地的考生都要在学校附近住宾馆了。假设在学校附近有C家宾馆,并且这些宾馆只有单人房,而每家宾馆的价格不一样,学生们都想找价格便宜的住,所以现在需要你的帮助,当有学生需要住宾馆的时候,告诉他哪个宾馆还有空的房间并且价格最便宜。而且有一个要求,同一个组的学生要住在同一个宾馆。
 

 

Input
输入包括多组数据。输入首先包括一个整数T(T <= 50),代表有T组数据。
每组数据首先是一个整数C(C <= 100),代表宾馆的个数,接下来是C行数据,每行3个整数,第一个代表宾馆的编号(<=1000),第二个是宾馆的房间数(<=50),第三个是宾馆的价格(<=1000)。
然后是一个整数T (T <= 1000),代表想找宾馆住的小组,接下来的T行每行代表一个要找宾馆的小组,每个小组不超过10人。
 

 

Output
对于每组数据中的想找宾馆的小组,输出他们应该找的宾馆编号。如果没有合适的宾馆或已经住满,输出”sorry”.
 

 

Sample Input
   
   
   
   
1 2 1 2 100 2 3 120 4 3 1 1 5
 

 

Sample Output
   
   
   
   
2 1 1 sorry
 

 

Author
8600
 

 

Source
2008浙大研究生复试热身赛(2)——全真模拟
 

 

Recommend
lcy
  #include<iostream> #include<cstdio> #include<queue> using namespace std; struct node{ friend bool operator<(node n1,node n2) { return n2.price<n1.price; } int number; int room; int price; }; node hotel[105]; int team[1005]; int main() { int t; scanf("%d",&t); while(t--) { int c; scanf("%d",&c); priority_queue<node>qu; for(int i=0;i<c;i++) {scanf("%d%d%d",&hotel[i].number,&hotel[i].room,&hotel[i].price); qu.push(hotel[i]); } int m; scanf("%d",&m); for(int i=0;i<m;i++) scanf("%d",&team[i]); int j=0; while(!qu.empty()) { hotel[j].number=qu.top().number; hotel[j].room=qu.top().room; hotel[j].price=qu.top().price; qu.pop(); j++; } int k=0,flag; for(int i=0;i<m;i++) { flag=0; for(int s=0;s<c;s++) { if(team[i]<=hotel[s].room) { hotel[s].room-=team[i]; printf("%d/n",hotel[s].number); flag=1; break; } } if(flag==0) printf("sorry/n"); } } return 0; }

你可能感兴趣的:(c,input,n2,output)