UVA-1610 Party Games (构造)
题目大意:给出一系列字符串,构造出一个字符串大于等于其中的一半,小于另一半。
题目分析:取大小为中间的两个a,b(a<b)。实际上就是找出第一个小于b的同时大于等于a的字符串,直接构造即可。要注意细节。
代码如下:
# include<iostream> # include<cstdio> # include<string> # include<cstring> # include<algorithm> using namespace std; string p[1001]; string solve(int n) { string a=p[n/2-1],b=p[n/2]; int la=a.size(); string ans=""; ans+='A'; int i=0; while(i<la){ while(ans[i]<='Z'&&ans<a) ++ans[i]; if(ans[i]<='Z'&&ans>=a&&ans<b) return ans; if(a[i]!=ans[i]) --ans[i]; ans+='A'; ++i; } } int main() { int n; while(scanf("%d",&n)&&n) { for(int i=0;i<n;++i) cin>>p[i]; sort(p,p+n); cout<<solve(n)<<endl; } return 0; }