1 #include <stdio.h>
2 #include <algorithm>
3 using namespace std;
4
5 struct MyStruct
6 {
7 int grade[6];
8 int Done[6];
9 int Perfect;
10 int sum;
11 int ID;
12 int num;
13 };
14
15 int cmp(MyStruct a,MyStruct b)
16 {
17 if(a.sum != b.sum ) return a.sum > b.sum;
18 if(a.Perfect != b.Perfect) return a.Perfect > b.Perfect;
19 return a.ID < b.ID;
20 }
21
22 MyStruct Student[10001];
23 MyStruct SqueStu[10001];
24 int main()
25 {
26 int StuNum,ProNum,SubNum;
27 int ProValue[6];
28 int i,j;
29 while(scanf("%d %d %d",&StuNum,&ProNum,&SubNum)!=EOF)
30 {
31 for(i=1;i<=StuNum;i++)
32 {
33 for(j=1;j<=5;j++)
34 {
35 Student[i].grade[j]=-1;
36 Student[i].Done[j]=0;
37 }
38 Student[i].Perfect=0;
39 }
40 getchar();
41 for(i = 1;i<=ProNum;i++)
42 scanf("%d",&ProValue[i]);
43
44 for(i=1;i<=SubNum;i++)
45 {
46 getchar();
47 int TemID,TemProID,TemGrade;
48 scanf("%d %d %d",&TemID,&TemProID,&TemGrade);
49 if(TemGrade == -1) TemGrade = 0;
50 else Student[TemID].Done[TemProID] = 1;
51 if(TemGrade>Student[TemID].grade[TemProID])
52 {
53 Student[TemID].grade[TemProID]=TemGrade;
54 Student[TemID].ID = TemID;
55 if(TemGrade == ProValue[TemProID]) Student[TemID].Perfect++;
56 }
57 }
58
59 int SqueStuNum=0;
60 for(i=1;i<=StuNum;i++)
61 {
62 int Temsum=0;
63 int IfPrint = 0;
64 for(j=1;j<=ProNum;j++)
65 {
66 if(Student[i].Done[j])
67 {
68 IfPrint=1;
69 Temsum+=Student[i].grade[j];
70 }
71 }
72
73 if(IfPrint)
74 {
75 Student[i].sum=Temsum;
76 SqueStu[SqueStuNum++]=Student[i];
77 }
78 }
79
80
81 sort(SqueStu,SqueStu+SqueStuNum,cmp);
82
83 int tag=-100;
84 int cnt=0;
85 int add=1;
86 for(i = 0;i < SqueStuNum ;i++)
87 {
88 if( SqueStu[i].sum != tag )
89 {
90 tag = SqueStu[i].sum;
91 cnt+= add;
92 add=1;
93 }
94 else ++add;
95
96 printf("%d %05d %d",cnt,SqueStu[i].ID,SqueStu[i].sum);
97
98 for(j= 1;j <= ProNum ;j++)
99 {
100 if(SqueStu[i].grade[j] == -1) printf(" -");
101 else
102 {
103 printf(" %d",SqueStu[i].grade[j]);
104 }
105 }
106 printf("\n");
107 }
108 }
109 return 0;
110 }