1075 PAT Judge (25 分)
#include
#include
using namespace std;
struct node{
int id, total, ret, f;
int s[10];
}a[10100], b[10100];
int p[10], vis[10100];
bool cmp(node x, node y){
if(x.total != y.total)
return x.total > y.total;
else if(x.ret != y.ret)
return x.ret > y.ret;
else if(x.id != y.id)
return x.id < y.id;
}
int main() {
int n, k, m, ret = 1;
cin >> n >> k >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= k; ++j)
a[i].s[j] = -1;
for(int i = 1; i <= k; ++i)
cin >> p[i];
while(m--){
int x, y, z;
cin >> x >> y >> z;
a[x].id = x;
a[x].s[y] = max(a[x].s[y], z);
if(z == -1)
a[x].s[y] = max(a[x].s[y], 0);
else
a[x].f = 1;
}
for(int i = 1; i <= n; ++i){
if(a[i].f){
b[ret] = a[i];
for(int j = 1; j <= k; ++j){
if(b[ret].s[j] != -1){
b[ret].total += b[ret].s[j];
if(b[ret].s[j] == p[j])
b[ret].ret++;
}
}
ret++;
}
}
sort(b + 1, b + ret, cmp);
int r = 0, net = 1;
for(int i = 1; i < ret; ++i){
if(b[i].total == b[i - 1].total){
net++;
printf("%d ", r);
}
else{
r += net; net = 1;
printf("%d ", r);
}
printf("%05d %d ", b[i].id, b[i].total);
for(int j = 1; j <= k; ++j){
if(b[i].s[j] != -1)
cout << b[i].s[j];
else
cout << "-";
if(j != k)
cout << " ";
}
cout << endl;
}
}