fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. struct Node {
  8. int name;
  9. int pen;
  10. int ac;
  11. vector<int> wa;
  12. Node(int n, int P) : name(n), pen(0), ac(0), wa(P, 0) { }
  13. // 0origin
  14. void accept(int i, int t) {
  15. ac++;
  16. pen += wa[i] * 20 + t;
  17. }
  18.  
  19. void wrong(int i) {
  20. wa[i]++;
  21. }
  22.  
  23. bool operator <(const Node & n) const {
  24. if(ac != n.ac) return ac > n.ac;
  25. if(pen != n.pen) return pen < n.pen;
  26. return name > n.name;
  27. }
  28.  
  29. bool same(const Node & n) const {
  30. return ac == n.ac && pen == n.pen;
  31. }
  32. };
  33.  
  34. int main() {
  35. for(int M, T, P, R; cin >> M >> T >> P >> R, M || T || P || R; ) {
  36. vector<Node> vec;
  37. for(int i = 0; i < T; i++) vec.push_back(Node(i+1, P));
  38. for(int i = 0; i < R; i++) {
  39. int m, t, p, j; cin >> m >> t >> p >> j;
  40. t--;
  41. p--;
  42. if(j == 0) {
  43. vec[t].accept(p, m);
  44. }
  45. else {
  46. vec[t].wrong(p);
  47. }
  48. }
  49. sort(vec.begin(), vec.end());
  50. cout << vec[0].name;
  51. for(int i = 1; i < (int)vec.size(); i++) {
  52. if(vec[i - 1].same(vec[i])) cout << "=";
  53. else cout << ",";
  54. cout << vec[i].name;
  55. }
  56. cout << endl;
  57. }
  58. }
  59.  
Success #stdin #stdout 0s 3044KB
stdin
300 10 8 5
50 5 2 1
70 5 2 0
75 1 1 0
100 3 1 0
150 3 2 0
240 5 5 7
50 1 1 0
60 2 2 0
70 2 3 0
90 1 3 0
120 3 5 0
140 4 1 0
150 2 4 1
180 3 5 4
15 2 2 1
20 2 2 1
25 2 2 0
60 1 1 0
120 5 5 4
15 5 4 1
20 5 4 0
40 1 1 0
40 2 2 0
120 2 3 4
30 1 1 0
40 2 1 0
50 2 2 0
60 1 2 0
120 3 3 2
0 1 1 0
1 2 2 0
300 5 8 0
0 0 0 0
stdout
3,1,5,10=9=8=7=6=4=2
2,1,3,4,5
1,2,3
5=2=1,4=3
2=1
1,2,3
5=4=3=2=1