题解#1
2026-10-13 19:50:29
发布于:湖南
0阅读
0回复
0点赞
思路:已有牌的分数固定求和。新增 张牌,每种无限,显然每张都选分数最大的那种点数。所以答案 = 已有牌分数和 (13个分数)。
注意:字符串中"10"占两个字符。解析方法:遍历字符串,如果 且 且 ,则是"10"(对应索引9),;否则映射单字符。
映射: 。
单字符映射可以用:如果是 索引0;'2'..'9' 索引 (因为 , ); 。
给出C++代码:
#include <bits/stdc++.h>
using namespace std;
int idx(char c) {
if (c == 'A') return 0;
if (c >= '2' && c <= '9') return c - '1'; // '2'->1 ... '9'->8
if (c == 'J') return 10;
if (c == 'Q') return 11;
return 12; // 'K'
}
int main() {
vector<int> a(13);
for (int i = 0; i < 13; i++) cin >> a[i];
int n, m;
cin >> n >> m;
string s;
cin >> s;
long long sum = 0;
for (int i = 0; i < (int)s.size(); ) {
if (s[i] == '1' && i + 1 < (int)s.size() && s[i + 1] == '0') {
sum += a[9]; // "10"
i += 2;
} else {
sum += a[idx(s[i])];
i += 1;
}
}
int mx = *max_element(a.begin(), a.end());
cout << sum + 1LL * m * mx << endl;
return 0;
数据范围:分数 , ,最大和约 , 足够,但用 保险。
这里空空如也





有帮助,赞一个