• Source
    1. #include<stdio.h>
    2. #include<string.h>
    3. #include<iostream>
    4. #include<map>
    5. #include<algorithm>
    6.  
    7. using namespace std;
    8.  
    9. struct data
    10. {
    11. int contestant,penalty,solved;
    12.  
    13. map<int,int>mp1;
    14. int problems[12];
    15.  
    16. } arr[110];
    17.  
    18.  
    19. bool cmp(data lhs,data rhs)
    20. {
    21. if(lhs.solved==rhs.solved)
    22. {
    23. if(lhs.penalty==rhs.penalty)
    24. {
    25. return (lhs.contestant < rhs.contestant);
    26. }
    27. return (lhs.penalty<rhs.penalty);
    28. }
    29. return lhs.solved>rhs.solved;
    30. }
    31.  
    32. map<int,int>mp;
    33.  
    34. int main()
    35. {
    36. int test,i,j,tc,tag,a,b,c,d;
    37. char ch,str[50];
    38.  
    39. scanf("%d",&test);
    40. getchar();
    41. getchar();
    42.  
    43. for(tc=1; tc<=test; tc++)
    44. {
    45. tag=0;
    46. if(tc>1)
    47. {
    48. puts("");
    49. }
    50.  
    51. while(gets(str))
    52. {
    53.  
    54. if(strlen(str)==0)
    55. {
    56. break;
    57. }
    58.  
    59. sscanf(str,"%d %d %d %c",&a,&b,&c,&ch);
    60.  
    61. if(mp.find(a)==mp.end())
    62. {
    63. mp[a]=++tag;
    64. }
    65. if(ch=='C')
    66. {
    67. if(arr[mp[a]].mp1.find(b)==arr[mp[a]].mp1.end())
    68. {
    69. arr[mp[a]].mp1[b]=b;
    70.  
    71. arr[mp[a]].solved+=1;
    72.  
    73. d=(arr[mp[a]].problems[b])*20;
    74.  
    75. arr[mp[a]].penalty+=d+c;
    76. }
    77.  
    78. arr[mp[a]].contestant=a;
    79.  
    80. }
    81. else if(ch=='I')
    82. {
    83. arr[mp[a]].contestant=a;
    84.  
    85. arr[mp[a]].problems[b]+=1;
    86. }
    87. else if(ch=='R'||ch=='U'|| ch=='E')
    88. {
    89. arr[mp[a]].contestant=a;
    90. }
    91. }
    92.  
    93. sort(arr+1,arr+tag+1,cmp);
    94.  
    95. for(i=1; i<=tag; i++)
    96. {
    97. cout<<arr[i].contestant<<" "<<arr[i].solved<<" "<<arr[i].penalty<<endl;
    98. }
    99.  
    100. mp.clear();
    101.  
    102. for(i=0; i<=105; i++)
    103. {
    104. arr[i].mp1.clear();
    105. arr[i].contestant=0;
    106. arr[i].penalty=0;
    107. arr[i].solved=0;
    108. memset(arr[i].problems,0,sizeof(arr[i].problems));
    109. }
    110. }
    111.  
    112. return 0;
    113. }