-
Notifications
You must be signed in to change notification settings - Fork 0
/
10258.cpp
87 lines (74 loc) · 1.47 KB
/
10258.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include<iostream>
#include<algorithm>
#include<string>
#include<sstream>
using namespace std;
struct node
{
int time = 0;
bool solved = false;
};
struct team
{
int indx=-1;
int solved_count = 0;
int pen_time = 0;
};
class myclass
{
public:
bool operator()(const team& t1, const team& t2)
{
if (t1.solved_count != t2.solved_count)
return t1.solved_count > t2.solved_count;
if (t1.pen_time != t2.pen_time)
return t1.pen_time < t2.pen_time;
return t1.indx < t2.indx;
}
};
int main()
{
int tc;
cin >> tc;
cin.ignore();
cin.ignore();
while (tc--)
{
team teams[101];
node scoreBoard[101][10];
string line;
while(getline(cin, line), line != "")
{
stringstream ss;
ss << line;
int teamIndx, probIndx, time;
ss >> teamIndx >> probIndx >> time;
char status;
ss >> status;
if (!scoreBoard[teamIndx][probIndx].solved)
{
teams[teamIndx].indx = teamIndx;
if (status == 'I')
scoreBoard[teamIndx][probIndx].time += 20;
else if (status == 'C')
{
scoreBoard[teamIndx][probIndx].solved = true;
scoreBoard[teamIndx][probIndx].time += time;
teams[teamIndx].solved_count++;
teams[teamIndx].pen_time += scoreBoard[teamIndx][probIndx].time;
}
}
}
myclass m;
sort(teams + 1, teams + 101, m);
for (int i = 1; i < 101; i++)
{
if (teams[i].indx == -1)
continue;
printf("%d %d %d\n", teams[i].indx, teams[i].solved_count, teams[i].pen_time);
}
if (tc != 0) cout << endl;
}
return 0;
}
//AC