Advertisement
Kaidul

UVa 10258

Dec 3rd, 2013
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define Max 105
  6.  
  7. struct player {
  8.     int id, solved, penalty ;
  9.     int factor[12],problems[12];
  10.     bool submit;
  11.     bool operator < (const player& a) const {
  12.         if(solved == a.solved) {
  13.             if(penalty == a.penalty)
  14.                 return id < a.id;
  15.             else return penalty < a.penalty;
  16.         } else return solved > a.solved;
  17.     }
  18. } players[Max];
  19.  
  20. void reset() {
  21.     for(int i = 0; i < Max; i++) {
  22.         players[i].id = i, players[i].solved = 0;
  23.         players[i].submit = false, players[i].penalty = 0;
  24.         memset(players[i].factor, 0, sizeof players[i].factor);
  25.         memset(players[i].problems, 0, sizeof players[i].factor);
  26.     }
  27. }
  28.  
  29. int main() {
  30. #ifndef ONLINE_JUDGE
  31.     freopen("input.txt", "r", stdin);
  32. #endif
  33.     int tcase;
  34.     int penalty, problemId, contestant;
  35.     char verdict;
  36.     char input[Max];
  37.     scanf("%d", &tcase);
  38.     getc(stdin);
  39.     gets(input);
  40.     while(tcase--) {
  41.         reset();
  42.         while(gets(input) and strcmp(input, "")) {
  43.             sscanf(input, "%d %d %d %c", &contestant, &problemId, &penalty, &verdict);
  44.             player obj;
  45.             obj = players[contestant];
  46.             obj.submit = true;
  47.             players[contestant] = obj;
  48.             if(verdict == 'R' or verdict == 'U' or verdict == 'E')
  49.                 continue;
  50.             if(verdict == 'I' and obj.problems[problemId] == 0) {
  51.                 obj.factor[problemId]++;
  52.             }
  53.             if(verdict == 'C') {
  54.                 if(obj.problems[problemId] == 0) {
  55.                     obj.solved++;
  56.                     obj.penalty = obj.penalty + obj.factor[problemId] * 20 + penalty;
  57.                 }
  58.                 obj.problems[problemId] = 1;
  59.             }
  60.             players[contestant] = obj;
  61.         }
  62.         sort(players, players + Max);
  63.         for(int i = 0; i < Max; i++) {
  64.             player instance = players[i];
  65.             if(instance.submit)
  66.                 printf("%d %d %d\n", instance.id, instance.solved, instance.penalty);
  67.         }
  68.         if(tcase) puts("");
  69.     }
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement