UVA - 1610 Party Games (字符串比较)

给你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 }

猜你喜欢

转载自www.cnblogs.com/asdfsag/p/10360726.html