吃菠萝的狼 2024-05-31 21:24 采纳率: 66.7%
浏览 8
已结题

c++—问题 T303361 空之青,海之蓝

题目描述
小美鱼喜欢看书,她在书中得到了一个字符串
𝑆
S,只包含大写字母。

现在美鱼得到了一个任务,要她把这个字符串变成
𝑇
T 。她每次可以将一个字母+1,比如A变成B,C变成D。特别的,Z会变成A。

在孜孜不倦的棒球练习之后,她也得到了新的能力:她可以将一个字母加上
𝑦
y ,例如
𝑦
=
3
y=3 时,A会变成D,同时超过Z的会自动从A开始,以此类推。简而言之,字符
𝑐

ch 会变成
(
𝑐

+
𝑦
)

𝑚
𝑜
𝑑

26
(ch+y) mod 26

(此处定义A的编号为0)

现在美鱼希望知道,现在她最少要多少次才能完成任务。

输入格式
第一行一个整数
𝑦
y ,意义如题。 第一行一个字符串
𝑆
S ,第二行一个字符串
𝑇
T,假设字符串的长度是
𝑛
n。

输出格式
一个整数,表示为了达成任务美鱼最小的操作次数。

输入输出样例
输入 #1复制
3
X
E
输出 #1复制
3
输入 #2复制
13
OWENOWLWENLE
MCFXAKIOIORZ
输出 #2复制
80
说明/提示
【样例解释】

X-(+3)->A-(+3)->D-(+1)->E
一共需要变3次。

【数据范围】

对于
20
%
20% 的数据,满足
1

𝑛

1
0
5
1≤n≤10
5
,并且使得
𝑦
=
1
y=1

对于
30
%
30% 的数据,满足
1

𝑛

20
1≤n≤20,无附加条件

对于
100
%
100% 的数据,满足
1

𝑛

1
0
5
,
1

𝑦

1
0
9
1≤n≤10
5
,1≤y≤10
9

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-31 21:24
    关注

    引自免费微信小程序:皆我百晓生

    这个问题可以通过计算两个字符串对应每个位置字符之间的差值,并考虑模26的情况来解决。具体步骤如下:

    1. 初始化一个变量minOperations为0,用于记录操作次数。
    2. 遍历两个字符串中的每一个字符对:
      • 计算两个字符的ASCII码差值。
      • 如果当前字符对相等,则跳过此步,继续下一个字符对。
      • 否则,根据y的值进行不同的处理:
        • 对于普通加1操作,计算绝对值后取模26,然后累加到minOperations
        • 对于加y操作,先计算(ch+y)的模26结果,然后与目标字符的ASCII码做差,取绝对值再取模26,最后累加到minOperations
    3. 返回minOperations作为最终答案。

    下面是完整的C++代码实现:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int calculateMinOperations(string S, string T, int y) {
        int minOperations = 0;
        for (size_t i = 0; i < S.length(); ++i) {
            char ch1 = S[i];
            char ch2 = T[i];
    
            // 普通加1操作
            int diff1 = abs((int)(ch2 - ch1));
            minOperations += diff1 % 26;
    
            // 加y操作
            int yMod26 = (int)(ch1 + y) % 26;
            int diff2 = abs(yMod26 - (int)(ch2));
            minOperations += diff2 % 26;
        }
        
        return minOperations / 2;  // 除以2是因为每对字符我们都算了两次
    }
    
    int main() {
        int y;
        string S, T;
        cin >> y >> S >> T;
    
        int result = calculateMinOperations(S, T, y);
        cout << result << endl;
    
        return 0;
    }
    

    这个程序首先读入yST,然后调用calculateMinOperations函数计算最小操作次数,最后输出结果。注意,由于我们对每对字符都进行了两次计算(一次加1,一次加y),所以最后还需要将结果除以2得到实际的最小操作次数。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上
  • ¥15 提问一个关于vscode相关的环境配置问题,就是输入中文但是显示不出来,代码在idea可以显示中文,但在vscode不行,不知道怎么配置环境