fork(5) download
  1. #include <stdio.h>
  2. #include <iostream>
  3. #include <bitset>
  4. #include <vector>
  5. #include <set>
  6. #include <algorithm>
  7.  
  8. using namespace std;
  9.  
  10. struct contestant{
  11. int score, penalty, num;
  12. contestant(): score(0), penalty(0){ }
  13. };
  14.  
  15.  
  16.  
  17. struct comp{
  18. bool operator()(contestant *a, contestant *b){
  19. return a->score>b->score || (a->score==b->score&&(a->penalty<b->penalty || (a->penalty==b->penalty&& a->num<b->num)) );
  20. }
  21. };
  22.  
  23. int main(){
  24. vector <int> inc(1600);
  25. bitset<101> part;
  26. bitset<1600> solv;
  27. int tc, cn, pn, tn;
  28. char ch;
  29. cin>>tc;
  30. while (tc--){
  31. fill(inc.begin(), inc.end(), 0);
  32. contestant con[101]; for (int i=1; i<101; con[i].num=i , ++i);
  33. part.reset(), solv.reset();
  34. while (true){
  35. char nc;
  36. scanf("%d %d %d %c", &cn, &pn, &tn, &ch);
  37. while (true){
  38. nc=cin.peek();
  39. if (nc!='\n'&&nc!=EOF) getchar();
  40. else {
  41. if (nc=='\n') getchar();
  42. break;
  43. }
  44. }
  45.  
  46. part.set(cn);
  47. int solnum=cn*pn;
  48. if (!solv[solnum]){
  49. if (ch=='C'){
  50. solv.set(solnum);
  51. ++con[cn].score;
  52. con[cn].penalty+=tn + inc[solnum]*20;
  53. }
  54. else if(ch=='I'){
  55. ++inc[solnum];
  56. }
  57. }
  58. nc=cin.peek();
  59. while (isspace(nc)&&nc!='\n'){
  60. getchar();
  61. nc=cin.peek();
  62. }
  63. if (nc=='\n'||nc==EOF) break;
  64. }
  65.  
  66. set <contestant *, comp > board;
  67. for (int i=1; i<101; ++i){
  68. if (part[i]){
  69. board.insert(con+i);
  70. }
  71. }
  72.  
  73. set <contestant *, comp >::iterator fit=board.begin(), lit=board.end();
  74. while(fit!=lit){
  75. printf("%d %d %d\n", (*fit)->num, (*fit)->score, (*fit)->penalty);
  76. ++fit;
  77. } if (tc)printf("\n");
  78.  
  79. }
  80. return 0;
  81. }
Success #stdin #stdout 0s 3484KB
stdin
2

1 2 10 I
3 1 11 C
1 2 19 R
1 2 21 C
1 1 25 C

1 2 10 I
3 1 11 C
1 2 19 R
1 2 21 C
1 1 25 C
stdout
1 2 66
3 1 11

1 2 66
3 1 11