UVa 1610 - Party Games
链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4485
题意:
输入一个n(2≤n≤1000,n是偶数)个字符串的集合D,找一个长度最短的字符串(不一定在D中出现)S,
使得D中恰好一半串小于等于S,另一半串大于S。如果有多解,输出字典序最小的解。
例如,对于{JOSEPHINE, JERRY},输出JF;对于{FRED, FREDDIE},输出FRED。
分析:
细节处理一下即可。
本题容易想复杂,或者把细节想错。我看到网上很多人的代码都比较复杂,其实不用那么复杂。。。
代码:
1 #include <iostream> 2 #include <string> 3 #include <algorithm> 4 using namespace std; 5 6 int main(){ 7 int n; 8 string s[1000+5]; 9 while(cin >> n && n){ 10 for(int i = 0; i < n; i++) cin >> s[i]; 11 sort(s, s + n); 12 13 string f = s[n/2-1], b = s[n/2], j; 14 for(int i = 0; f[i]; i++){ 15 j += f[i]; 16 if(f <= j && j < b) break; 17 if(j[i] < 'Z'){ 18 j[i]++; 19 if(b > j) break; 20 else j[i]--; 21 } 22 } 23 cout << j << endl; 24 } 25 return 0; 26 }