Skip to content

Commit 97511d4

Browse files

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

UVa/000612.cpp

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#include <iostream>
2+
#include <vector>
3+
#include <algorithm>
4+
5+
using namespace std;
6+
7+
int n;
8+
9+
int inv(string &s, int i, int j) {
10+
if (j <= i) return 0;
11+
12+
int mid = (i + j) / 2;
13+
int invl = inv(s, i, mid);
14+
int invr = inv(s, mid+1, j);
15+
16+
string t;
17+
int invm = 0;
18+
int u = i, v = mid+1;
19+
while (u <= mid && v <= j) {
20+
if (s[u] <= s[v]) t += s[u++];
21+
else {
22+
invm += mid - u + 1;
23+
t += s[v++];
24+
}
25+
}
26+
27+
while (u <= mid) t += s[u++];
28+
while (v <= j) t += s[v++];
29+
30+
for (int k = i; k <= j; k++) s[k] = t[k-i];
31+
32+
return invl + invr + invm;
33+
}
34+
35+
bool cmp(string s, string t) {
36+
return inv(s, 0, n-1) < inv(t, 0, n-1);
37+
}
38+
39+
int main() {
40+
int M;
41+
cin >> M;
42+
while (M--) {
43+
int m;
44+
cin >> n >> m;
45+
vector<string> v;
46+
while (m--) {
47+
string s;
48+
cin >> s;
49+
v.push_back(s);
50+
}
51+
52+
stable_sort(v.begin(), v.end(), cmp);
53+
for (string &s : v) cout << s << endl;
54+
55+
if (M > 0) cout << endl;
56+
}
57+
58+
return 0;
59+
}

0 commit comments

Comments
 (0)