1. 程式人生 > >uva1610

uva1610

tdi space sstream int cstring span 思路 right name

/*
大體思路是用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; }

uva1610