PAT Ranking (排名)
?
?
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhejiang University. Each test is supposed to run simultaneously in several places, and the ranklists will be merged immediately after the test. Now it is your job to write a program to correctly merge all the ranklists and generate the final rank.
?
?Input Specification:
?
Each input file contains one test case. For each case, the first line contains a positive number N (<=100), the number of test locations. Then N ranklists follow, each starts with a line containing a positive integer K (<=300), the number of testees, and then K lines containing the registration number (a 13-digit number) and the total score of each testee. All the numbers in a line are separated by a space.
?
?Output Specification:
?
For each test case, first print in one line the total number of testees. Then print the final ranklist in the following format:
?
registration_number final_rank location_number local_rank
?
The locations are numbered from 1 to N. The output must be sorted in nondecreasing order of the final ranks. The testees with the same score must have the same rank, and the output must be sorted in nondecreasing order of their registration numbers.
Sample Input:
2
5
1234567890001 95
1234567890005 100
1234567890003 95
1234567890002 77
1234567890004 85
4
1234567890013 65
1234567890011 25
1234567890014 100
1234567890012 85
?Sample Output:
9
1234567890005 1 1 1
1234567890014 1 2 1
1234567890001 3 1 2
1234567890003 3 1 2
1234567890004 5 1 4
1234567890012 5 2 2
1234567890002 7 1 5
1234567890013 8 2 3
1234567890011 9 2 4
?
?
先分組排名,再全部排名
?
1
#include <iostream>
2
3
#include <
string
>
4
5
#include <algorithm>
6
7
#include <vector>
8
9
using
namespace
std;
10
11
12
13
struct
stu
14
15
{
16
17
int
loc,frank,lrank,gra;
18
19
string
name;
20
21
};
22
23
24
25
26
27
bool
cmp(stu s1,stu s2)
28
29
{
30
31
if
(s1.frank==
s2.frank)
32
33
return
s1.name<
s2.name;
34
35
36
37
return
s1.frank<
s2.frank;
38
39
}
40
41
42
43
bool
cmpg(stu s1,stu s2)
44
45
{
46
47
48
49
return
s1.gra>
s2.gra;
50
51
}
52
53
54
55
int
main()
56
57
{
58
59
60
61
int
n;
int
k;
int
rank,count;
62
63
int
i,j;
64
65
while
(cin>>
n)
66
67
{
68
69
vector<stu>
total;
70
71
for
(i=
1
;i<=n;i++
)
72
73
{
74
75
cin>>
k;
76
77
vector<stu>
s(k);
78
79
for
(j=
0
;j<k;j++
)
80
81
{
82
83
cin>>s[j].name>>
s[j].gra;
84
85
s[j].loc=
i;
86
87
}
88
89
sort(s.begin(),s.end(),cmpg);
90
91
count=
1
;
92
93
s[
0
].lrank=
1
;
94
95
total.push_back(s[
0
]);
96
97
for
(j=
0
;j<k-
1
;j++
)
98
99
{
100
101
if
(s[j].gra==s[j+
1
].gra)
102
103
{
104
105
s[j+
1
].lrank=
s[j].lrank;
106
107
count++
;
108
109
}
110
111
else
112
113
{
114
115
s[j+
1
].lrank=s[j].lrank+
count;
116
117
count=
1
;
118
119
}
120
121
total.push_back(s[j+
1
]);
122
123
}
124
125
}
126
127
128
129
sort(total.begin(),total.end(),cmpg);
130
131
count=
1
;
132
133
total[
0
].frank=
1
;
134
135
for
(j=
0
;j<total.size()-
1
;j++
)
136
137
{
138
139
if
(total[j].gra==total[j+
1
].gra)
140
141
{
142
143
total[j+
1
].frank=
total[j].frank;
144
145
count++
;
146
147
}
148
149
else
150
151
{
152
153
total[j+
1
].frank=total[j].frank+
count;
154
155
count=
1
;
156
157
}
158
159
}
160
161
162
163
sort(total.begin(),total.end(),cmp);
164
165
cout<<total.size()<<
endl;
166
167
for
(i=
0
;i<total.size();i++
)
168
169
cout<<total[i].name<<
"
"
<<total[i].frank<<
"
"
<<total[i].loc<<
"
"
<<total[i].lrank<<
endl;
170
171
172
173
}
174
175
return
0
;
176
177
}
178
179
?
更多文章、技術交流、商務合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

