题意:
到老舊的火車站你也許會遇到少數僅存的"車箱置換員",車箱置換員是車站的員工,他的工作是重新排列火車車箱。
當每節車箱(尤其是裝貨的車箱)都經過適當的排列之後,火車司機在每個車站卸貨時只需從最後車箱一節一節依序放下即可。
"車箱置換員"的職稱起源於一座位於河畔的火車站,鐵路橫跨在河的兩岸,當船隻要通行時,橋上的鐵路不像其他地方一樣會垂直升起,而是以河中央的橋墩為中心旋轉90度,此時船隻可從橋的左右兩旁經過。
另外,首位車箱置換員發現一件有趣的事,當橋在作旋轉時最多可乘載兩節車箱的重量,所以當橋作180度的旋轉之後,其上的車箱就被掉換位置了,因此他就能重新排列車箱(副作用就是車箱前後位置會相反,不過因為車箱被設計成可以前後移動,所以無所謂)。
現在幾乎所有車箱置換員都死光了,鐵路公司必須做車箱掉換的自動化,需要寫一個程式來計算共需置換相鄰的車箱幾次才能使所有車箱依序排好,寫程式的工作就交給你了。(from Ruby兔)
无力吐槽所有的车厢置换员都死光了。。。原题就是这样写的。。。
其实题目说这么多就是要让你模拟一下冒泡排序,然后求排序所需要的交换车厢的次数。
代码:
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 50;
int t[maxn];
int main() {
int n;
scanf("%d", &n);
while (n--) {
int T;
scanf("%d", &T);
for (int i = 0; i < T; i++)
scanf("%d", &t[i]);
int sw = 0;
for (int i = 0; i < T; i++)
for (int j = i; j < T; j++)
if (t[i] > t[j]) {
swap(t[i], t[j]);
sw++;
}
printf("Optimal train swapping takes %d swaps.\n", sw);
}
return 0;
}