-
Notifications
You must be signed in to change notification settings - Fork 0
/
1075.cpp
79 lines (77 loc) · 1.72 KB
/
1075.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <iostream>
#include <algorithm>
#include <string>
#include <iomanip>
#include <cstring>
using namespace std;
const int maxn=1e4+10;
int n,k,m;
int p[10];
struct ty{
string id;
int a[10];
int sum;
int perfect;
bool operator<(const ty& o)const{
if(sum!=o.sum) return sum>o.sum;
if(perfect!=o.perfect) return perfect>o.perfect;
return id<o.id;
}
}node[maxn];
int to_int(string x){
int len=x.length();
int tmp=0;
for(int i=0;i<len;i++){
tmp*=10;tmp+=x[i]-'0';
}
return tmp;
}
int x,id,b;
string a;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cin>>n>>k>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){
node[i].a[j]=-2;
}
}
for(int i=1;i<=k;i++){ cin>>p[i];}
while(m--){
cin>>a>>id>>x;
b=to_int(a);
node[b].id=a;
node[b].a[id]=max(node[b].a[id],x);
}
for(int i=1;i<=n;i++){
bool flag=false;
for(int j=1;j<=k;j++){
if(node[i].a[j]>0){
node[i].sum+=node[i].a[j];
}
if(node[i].a[j]==p[j]){
node[i].perfect++;
}
if(node[i].a[j]>=0){
flag=true;
}
if(node[i].a[j]==-1) node[i].a[j]=0;
}
if(!flag) node[i].sum=-1;
}
sort(node+1,node+1+n);
int sum=0,rank=0;
for(int i=1;i<=n;i++){
if(node[i].sum==-1) break;
if(node[i].sum!=sum) rank=i;
cout<<rank<<' '<<node[i].id<<' '<<node[i].sum;
for(int j=1;j<=k;j++){
if(node[i].a[j]==-2) cout<<' '<<'-';
else cout<<' '<<node[i].a[j];
}
cout<<'\n';
sum=node[i].sum;
}
return 0;
}