/* 大体思路是用string存储字符串,从小到大进行排序,因为n是偶数所以直接选出中间两个字符串left和right来计算结果。 从left的第一个元素开始,先把他+1,然后累加到ans中,如果此时ans小于right,那么ans一定是最优解,直接跳出循环输出结果。 如果ans大于或等于right,说明+1后ans大了,把他-1回到正常值,然后继续循环。。。。。。 然后要注意细节,首先+1时不能超过Z,然后注意处理最后一个元素,因为+1法对最后一个元素无效 最后庆幸没有空串 */ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<sstream> using namespace std; string a[1005]; int main() { int n,i; while(scanf("%d",&n)!=EOF&&n) { for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); string left=a[n/2-1]; string right=a[n/2]; int len=left.size(); string ans; for(int i=0;i<len;i++) { if(left[i]+1<=‘Z‘&&i!=len-1) { ans+=left[i]+1; if(ans<right) break; ans[i]--; } else ans+=left[i]; } cout<<ans<<endl; } return 0; }
时间: 2024-11-05 02:18:12