UVA 10905 - Children's Game
连接:戳我。 AC了。
解法:
对string排序,然后输出。
关键点在于:
如何排序 -> 也就是按照什么标准来排序 -> 也就是:对于两个string,我们怎么评判一个string在另一个string的前面。
如何思考:
Bad Way:
我一开始为了凑出string a在string b前面,于是想过对这两个string,index by index地搜索然后来看前后位置。
这样是可以的,但是特别繁琐而且容易出错。
Good Way:
避免支离破碎地分解,整体代入:
给了两个string a & b, 根据题目要求,如果 a+b > b+a 那么 a 在 b 前面。
1 /* 2 Author: frankdj 3 State: AC 4 */ 5 #include <iostream> 6 #include <string> 7 #include <algorithm> 8 using namespace std; 9 10 const int kMaxString = 50; 11 12 int Compare(const void* _a, const void* _b) { 13 string a = (*((string*) _a)); 14 string b = (*((string*) _b)); 15 return (a+b) < (b+a); 16 } 17 18 int main(int argc, char *argv[]) { 19 #ifndef ONLINE_JUDGE 20 freopen("input.txt", "r", stdin); 21 #endif 22 23 int integers_count = 0; 24 string integers[kMaxString]; 25 26 while (cin >> integers_count && integers_count != 0) { 27 for (int i = 0; i < kMaxString; i++) { 28 integers[i] = ""; 29 } 30 31 for (int i = 0; i < integers_count; i++) { 32 cin >> integers[i]; 33 } 34 35 qsort(integers, integers_count, sizeof(string), Compare); 36 37 for (int i = 0; i < integers_count; i++) { 38 cout << integers[i]; 39 } 40 cout << endl; 41 } 42 return 0; 43 }
这里的东西都是自娱自乐的.我只是抱着构思算法的心态去做UVA的题.
我所有的code都不可能AC的.因为我就没想着让它能AC.