测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25220. 编程实现:魔法师艾莉有一条由 n 颗宝石组成的项链,这些宝石围成一圈。每颗宝石用字符 'A' 或字符 'B' 表示,'A' 表示魔力宝石,'B' 表示普通宝石。艾莉可以利用项链中 2 颗相邻的魔力宝石来施展一次魔咒。施展魔咒后,这 2 颗宝石就会失去魔力变为普通宝石,同时艾莉的魔力值增加 1 点。给定一个字符串 S,表示宝石项链,第一个字符和最后一个字符表示的宝石位置相邻。请计算艾莉最多能获得多…

填空题 容易

题目描述

编程实现:

魔法师艾莉有一条由 n 颗宝石组成的项链,这些宝石围成一圈。每颗宝石用字符 'A' 或字符 'B' 表示,'A' 表示魔力宝石,'B' 表示普通宝石。

艾莉可以利用项链中 2 颗相邻的魔力宝石来施展一次魔咒。施展魔咒后,这 2 颗宝石就会失去魔力变为普通宝石,同时艾莉的魔力值增加 1 点。

给定一个字符串 S,表示宝石项链,第一个字符和最后一个字符表示的宝石位置相邻。请计算艾莉最多能获得多少点魔力值。

例如:n = 7,S = "ABAAABA";第一个字符表示第 1 颗宝石,第二个字符表示第 2 颗宝石......以此类推,项链如下图所示:

艾莉可以按照以下方案来施展魔咒增加魔力值:

1)利用第 3 颗和第 4 颗宝石施展一次魔咒,施展后项链状态如下;

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

此时,项链中没有 2 颗相邻的魔力宝石,无法再施展魔咒,故艾莉最多可以获得 2 点魔力值。

输入描述:

第一行输入一个整数 n(5≤n≤100),表示项链中宝石的总数;

第二行输入一个长度为 n 的字符串 S,S 仅包含字符 'A' 和 'B','A' 表示魔力宝石,'B' 表示普通宝石。

输出描述:

输出一个整数,表示艾莉最多可以获得多少点魔力值。

样例输入:

7
ABAAABA

样例输出:

2

参考答案

n = int(input( ).strip( )) s = list(input( ).strip( )) count = 0 changed = True while changed: changed = False i = 0 while i < n: next_idx = (i + 1) % n if s[i] == 'A' and s[next_idx] == 'A': s[i] = 'B' s[next_idx] = 'B' count += 1 changed = True i += 1 # 跳过已处理位置 i += 1 print(count)

答案解析

环形处理: 使用 (i+1) % n 处理首尾相连。

贪心模拟:

遍历寻找相邻 AA,将其变为 BB,计数 +1

循环直到无更多可操作对

跳过机制: 操作后跳过下一个位置防止重复处理。

上一题 下一题