uva1610
阿新 • • 發佈:2017-08-19
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