iT邦幫忙

0

[解題紀錄]:Maximum Cost Deletion

  • 分享至 

  • xImage
  •  

題目

解題思路:

  1. 首先注意到計算點數的公式a * l + b,可以發現如果把字串全部拿掉了話,那麼公式中a * l的部份肯定是一樣的
  2. 再來是b的部份,取決於總共拿了幾次
  3. 如果b<0那麼拿愈少次愈好,如果b>0那麼拿愈多次愈好(就直接拿l次)
  4. 要如何拿的少次:需要一些觀察,在紙上稍微畫一下就會知道了,這是我寫這題學到的最重要的事情

程式碼:

// https://codeforces.com/contest/1550/problem/B
#include <iostream>
using namespace std;

int part(const string str)
{
    long long part = 1, len = str.length();
    char lastChar = str[0];
    for (int i = 1; i < len; i++) {
        if (lastChar != str[i])
            part++;
        lastChar = str[i];
    }
    return part;
}

int main()
{
    int t;
    cin >> t;
    while (t--) {
        long long n, a, b, sum = 0;
        string str;
        cin >> n >> a >> b;
        cin >> str;

        if (b >= 0) {
            cout << ((a + b) * str.length()) << endl;
        } else { 
            cout << (long long)(a * str.length() + b * (part(str) / 2 + 1)) << endl;
        }
    }

    return 0;
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言