zoukankan      html  css  js  c++  java
  • uva1610

    /*
    大体思路是用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;
    } 
  • 相关阅读:
    【笔记】隐式寻址方式(pending...)
    【笔记】有结构文件(pending...)
    【笔记】目录项(pending...)
    【笔记】主存储器
    Ubuntu 16.04 升级OpenSSH至7.7p1
    awk用法笔记
    find命令笔记
    VIM的使用
    Shell
    Linux文本处理三剑客
  • 原文地址:https://www.cnblogs.com/renwjing/p/7397795.html
Copyright © 2011-2022 走看看