[解题纪录]:Maximum Cost Deletion

题目

解题思路:

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

<<:  从零开始用github架设静态网站入门(3) - CSS客制化

>>:  蓝牙小知识

好想中乐透啊,Ruby 30 天刷题修行篇第十四话

嗨我是A Fei,连续好几天都十一点多回家,真的是累翻,先来看看今天的题目: Time to win...

Day 01 - 哇!!来到第四年参赛罗~~

一晃眼竟然已经来到第四年参加铁人赛了, 只能说是时光飞逝(Time flies~~~), 很高兴又...

Android Studio初学笔记-Day2-LinearLayout介绍

对於初学着来说(像我本人),一开始如果没先了解布局的运作容易在布局的编排上产生问题,所以第一篇先来介...

2.移转 Aras PLM大小事-拆解Agile的准备工作

第2话 拆解Agile的准备工作 刚开始会摸不着头绪,应该想着要从Agile中汇出资料 於是在资料库...

[Day3]-if叙述

if…else叙述,基本格式为: if(条件): 条件成立时执行 else: 条件不成立时执行 i...