CodeForces-1144E Median String (模拟)

题意:给出字符串长度n,和两个字符串,输出不大于字符串s不小于字符串t的集合的最中间字符串(类似中位数那种)。

思路:我先尝试在想是否是 集合个数除以2 然后加到最小的字符串上去(中位数思想),然后又在找两个字符串中间个数的时发现 集合个数为 (26-'a')*(26-"b)...这种形式 ,所以估计为转化26进制的运算

(事实上这就是这道题的做法,然鹅我却写bug一直没调出来)对于模拟问题,思路一定要清晰,本身这类题就没什么难度

 

题解:

#include <string>
#include <iostream>
 
using namespace std;
 
int ans[200010];
 
string s,t;
int main()
{
 
    int n;
    cin>>n>>s>>t;
//模拟26位进制加减, 对于这种问题如果在加的时候就模拟进位或许会写乱,
//所以我们把步骤分开一步一步来 

        //求和
    for(int i=0;i<n;i++)
         ans[i] = (s[i]-'a')+(t[i]-'a');
     //进位     
    for(int i=n-1;i>0;i--){
        if(ans[i]>=26){
            ans[i]-=26;
            ans[i-1]++;
        }
    }
        //取中
    for(int i=0;i<n;i++){
        if(ans[i]%2){
            ans[i] /= 2;
            ans[i+1]+=26;
        }else ans[i] /= 2;
    }
        //输出
    for(int i=0;i<n;i++){
         printf("%c",ans[i]+'a');
    }
    printf("\n");
    return 0;
}

 

posted @ 2019-07-23 09:53  Tianwell  阅读(142)  评论(0编辑  收藏  举报