解析: Train Swapping 这题目出得太坑爹,实在是看不懂,只好看别人的分析。题目的实质是计算冒泡排序的交换次数。
虽然acm考察的是解决实际问题的能力,但是我不认为出题者应该在如何让鲜明的问题看上去天花乱坠上下功夫。
——看中文翻译之后还是看不懂题意。
Flip Sort 题目出得很直接,由于题目的意思一样,都是冒泡排序,就放在一起写了。
1 #include <stdio.h> 2 int main() 3 { 4 int i, n, j, swap, l, t; 5 int array[55], flag; 6 scanf("%d", &n); 7 while(n--){ 8 scanf("%d", &l); 9 for(i = 0; i < l; i++) 10 scanf("%d", &array[i]); 11 swap = 0; 12 flag = 1; 13 while(flag){ 14 flag = 0; 15 for(j = 0; j < l - 1; j++) 16 if(array[j] > array[j+1]){ 17 t = array[j]; 18 array[j] = array[j+1]; 19 array[j+1] = t; 20 flag = 1; 21 swap++; 22 } 23 } 24 printf("Optimal train swapping takes %d swaps.\n", swap); 25 } 26 return 0; 27 }