UVa 1610

链接:

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 }
原文地址:https://www.cnblogs.com/hkxy125/p/8322403.html