A25136. 魔法项链
填空题
容易
知识点
题目描述
魔法项链
题目描述:
魔法师艾莉有一条由 n 颗宝石组成的项链,这些宝石围成一圈。每颗宝石用字符 'A' 或字符 'B' 表示,'A' 表示魔力宝石,'B' 表示普通宝石。
艾莉可以利用项链中 3 颗相邻的魔力宝石来施展一次魔咒。施展魔咒后,这 3 颗宝石就会变为普通宝石,同时艾莉的魔力值增加 1 点。
给定一个字符串 S,表示宝石项链,第一个字符和最后一个字符表示的宝石位置相邻。请计算艾莉最多能获得多少点魔力值。
例如:n = 11,S = "AABAAABABAA",第一个字符表示第 1 颗宝石,第二个字符表示第 2 颗宝石......以此类推,项链如下图所示:

艾莉可以按照以下方案来施展魔咒增加魔力值:
1)利用第 4 颗、第 5 颗和第 6 颗宝石施展一次魔咒,施展后项链状态如下:

2)利用第 1 颗、第 2 颗和第 11 颗宝石施展一次魔咒,施展后项链状态如下:

此时,项链中没有 3 颗相邻的魔力宝石,无法再施展魔咒,故艾莉最多可以获得 2 点魔力值。
输入描述:
第一行输入一个整数 n(5≤n≤1000),表示项链中宝石的总数;
第二行输入一个长度为 n 的字符串 S,S 仅包含字符 'A' 和 'B','A' 表示魔力宝石,'B' 表示普通宝石。
输出描述:
输出一个整数,表示艾莉最多可以获得多少点魔力值。
样例输入:
11
AABAAABABAA样例输出:
2参考答案
#include <iostream>
#include <string>
using namespace std;
int main() {
int n, count = 0;
string s;
cin >> n >> s;
bool found = true;
while (found) {
found = false;
for (int i = 0; i < n; i++) {
if (s[i]=='A' && s[(i+1)%n]=='A' && s[(i+2)%n]=='A') {
s[i] = s[(i+1)%n] = s[(i+2)%n] = 'B';
count++;
found = true;
break;
}
}
}
cout << count << endl;
return 0;
}答案解析
环形字符串中暴力搜索连续三个 'A',替换为 'B' 并计数,直到无连续三个 'A'。
上一题
下一题