代码求调
  • 板块灌水区
  • 楼主__FDOI__
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/7/1 21:05
  • 上次更新2023/11/3 11:56:36
查看原帖
代码求调
1015756
__FDOI__楼主2023/7/1 21:05

题目描述 给出一个字符串,有两种操作: 花费 B,修改串的一个字母 花费 A,把串的第一位放到最后一位 ,修改串的一个字母 求把原串变成回文串的最小代价 输入格式 先输入 n,A,B; ,第二行字符串S

输出格式: 输出答案 样例 #1

样例输入 #1 
5 1 2
rrefa
样例输出 #1
3

样例解释 首先,支付 2日元费用执行第二种操作一次:让 i=5,将 S5替换为 e。现在, S变为 rrefe。 然后,支付 1日元费用执行第一种操作一次。现在, S变为 refer,这是一个回文字符串。 因此,你可以以 3 日元的代价使 S 成为一个回文字符串。由于你不能用2日元或更少的代价让 S 成为一 个回文字符串,所以答案是3 。 我的代码:

#include <iostream>
#include <string>

using namespace std;

int minPalindromeCost(string s, int A, int B) {
    int left = 0;
    int right = s.length() - 1;
    int cost = 0;

    while (left <= right) {
        if (s[left] == s[right]) {
            left++;
            right--;
        } else {
            if (A < B) {
                cost += A;
                s[left] = s[right];
                left++;
            } else {
                cost += B;
                s.insert(s.begin() + right + 1, s[left]);
                left++;
                right++;
            }
        }
    }

    return cost;
}

int main() {
    int n, A, B;
    string s;

    cin >> n >> A >> B;
    cin >> s;

    int minCost = minPalindromeCost(s, A, B);
    cout << minCost << endl;

    return 0;
}
2023/7/1 21:05
加载中...