题目
解题思路:
首先注意到计算点数的公式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;}