#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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)