ACM HDU 1236ランキング(簡単水題)

9670 ワード

ランク付け
Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7425    Accepted Submission(s): 2796
Problem Description
今日の搭乗試験はリアルタイムのRanklistがありますが、上のランキングは完成した問題数によって並べ替えられただけで、考慮していません
1問あたりの点数なので、最後の順位ではありません.合格点を決めて、プログラムを書いて最後に合格点を見つけてください.
受験生は、彼らの成績を降順に印刷します.
 
Input
テスト入力には、いくつかの試験の情報が含まれています.各試験情報の1行目に受験者数N(0<1000)、試験問題数M(0名の受験生の受験番号(長さが20を超えない文字列)、その学生が解決した問題の総数m、およびこのm題の問題番号
(タイトル番号は1からMまで).
読み込んだ受験者数が0の場合、入力が終了し、この試験は処理されません.
 
Output
試験ごとに、まず1行目に合格ラインを下回らない受験生数nを出力し、その後、n行は点数で高い
低出力オンラインの受験生の試験番号と点数まで、その間は1スペースで区切られています.複数の受験生の点数が同じなら、彼らによって試験する.
番号の昇順出力.
 
Sample Input
4 5 25 10 10 12 13 15 CS004 3 5 1 3 CS003 5 2 4 1 3 5 CS002 2 1 2 CS001 3 2 3 5 1 2 40 10 30 CS001 1 2 2 3 20 10 10 10 CS000000000000000001 0 CS000000000000000002 2 1 2 0
 
Sample Output
3 CS003 60 CS001 37 CS004 37 0 1 CS000000000000000002 20
Hint
Huge input, scanf is recommended.
 
Source
浙大コンピュータ大学院生の再試験の上機試験-2005年
 
Recommend
JGShining
 
 
 
#include<stdio.h>
#include
<algorithm>
#include
<iostream>
#include
<string.h>
using namespace std;
struct Node
{
char name[25];
int score;
}node[
1005];
bool cmp(Node a,Node b)
{
if(a.score!=b.score)return a.score>b.score;
return strcmp(a.name,b.name)>0?0:1;
}
int main()
{
// freopen("test.in","r",stdin);
//freopen("test.out","w",stdout);
int n,m,g,i;
int s[15];
int x,p;
while(scanf("%d",&n),n)
{
scanf(
"%d%d",&m,&g);
for(i=0;i<m;i++)
scanf(
"%d",&s[i]);
for(i=0;i<n;i++)
{
scanf(
"%s",&node[i].name);
scanf(
"%d",&p);
node[i].score
=0;
while(p--)
{
scanf(
"%d",&x);
node[i].score
+=s[x-1];
}
}
sort(node,node
+n,cmp);
int cnt=0;
for(i=0;i<n;i++)
{
if(node[i].score<g)break;
cnt
++;
}
printf(
"%d
",cnt);
for(i=0;i<cnt;i++)
printf(
"%s %d
",node[i].name,node[i].score);
}
return 0;
}