给你n(n为偶数)个字符串,让你找出一个长度最短且字典序尽量小的字符串,使得一半的字符串小于等于该串,一半的字符串大于该串。
紫薯上说这道题有坑,但其实思路对了就没什么坑。
很明显,只要取夹在中间两个字符串间的最小字符串就行了。可以从小到大枚举字符串的长度,如果该长度下存在满足条件的字符串则返回结果,否则把较小的字符串上对应位的字符加到末尾就行了。
因为想错思路WA了好几次,最后一次WA居然是忘了判断n=0的情况...(为什么我总是完美避开正确答案,QAQ)
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N=1000+10; 5 int n; 6 string s[N],s1,s2; 7 8 string solve() { 9 string ss; 10 while(1) { 11 for(char ch=‘A‘; ch<=‘Z‘; ++ch) { 12 string t=ss+ch; 13 if(t>=s1&&t<s2)return t; 14 } 15 ss.push_back(s1[ss.length()]); 16 } 17 } 18 19 int main() { 20 ios::sync_with_stdio(0); 21 while(cin>>n&&n) { 22 for(int i=0; i<n; ++i)cin>>s[i]; 23 sort(s,s+n); 24 s1=s[n/2-1],s2=s[n/2]; 25 cout<<solve()<<endl; 26 } 27 return 0; 28 }
原文地址:https://www.cnblogs.com/asdfsag/p/10360726.html
时间: 2024-10-12 23:14:54