[解题纪录]:Maximum Cost Deletion

题目

解题思路:

首先注意到计算点数的公式a * l + b,可以发现如果把字串全部拿掉了话,那么公式中a * l的部份肯定是一样的再来是b的部份,取决于总共拿了几次如果b<0那么拿愈少次愈好,如果b>0那么拿愈多次愈好(就直接拿l次)要如何拿的少次:需要一些观察,在纸上稍微画一下就会知道了,这是我写这题学到的最重要的事情

程式码:

// 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;}

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章