题意:给你2k个字符串,然后自己构造一个字符串其中一半要求小于等于这个字符串,另一半大于这个字符串,这个字符串尽量短,这个基础上如果有多个解,再求最小的解。
直接从前往后扫,要注意Z字符的情况
代码比较简洁,这个题坑比较多
AC代码:
#include<iostream>
#include<cstdio>
#include<set>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1024;
int n;
string s[maxn];
char c[40];
int main(){
while(scanf("%d", &n), n){
for(int i =0; i<n; ++i) cin>>s[i];
sort(s, s+n);
int ri=n>>1;
int le=ri-1;
memset(c, 0 ,sizeof(c));
for(int i=0; i<=s[le].size();++i){
if(i==s[le].size()) break;
if(i>=s[ri].size()){
if(i==s[le].size()-1||(s[le][i]=='Z')) { c[i]=s[le][i];}
else { c[i]=s[le][i]+1; break;}
}
else if(s[le][i]==s[ri][i]||i==s[le].size()-1||(s[le][i]+1==s[ri][i]&&i==s[ri].size()-1)||(s[le][i]=='Z')) c[i]=s[le][i];
else { c[i]=s[le][i]+1; break;}
}
cout<<c<<endl;
}
return 0;
}