以下是使用 Python 实现的解决方案: ```python def min_rotate_to_effective(arr): n = len(arr) # 尝试所有可能的翻转情况 min_flip = float('inf') for i in range(n): # 进行翻转 new_arr = arr[i:] + arr[:i] # 检查翻转后的排列是否红蓝相间 valid = True for j in range(1, n): if new_arr[j] == new_arr[j - 1]: valid = False break if valid: min_flip = min(min_flip, i) # 如果没有找到有效的排列,返回 -1 if min_flip == float('inf'): return -1 return min_flip # 读取输入 n = int(input()) a = input() # 调用函数并输出结果 result = min_rotate_to_effective(a) print(result) ``` 代码解释 1. 函数定义:`min_rotate_to_effective` 函数接受一个字符串表示的加速珠排列,返回最少需要翻转的珠子数量。 2. 尝试所有可能的翻转情况:使用 `for` 循环遍历所有可能的翻转位置 `i`,将前 `i` 个珠子翻转到末尾得到新的排列 `new_arr`。 3. 检查排列是否有效:对于每个新的排列,使用 `for` 循环检查相邻的珠子是否颜色不同。如果发现相邻珠子颜色相同,则该排列无效。 4. 记录最小翻转数量:如果排列有效,则更新最小翻转数量 `min_flip`。 5. 返回结果:如果没有找到有效的排列,返回 -1;否则返回最小翻转数量。 额外注意的逻辑点 1. 边界条件:当输入的加速珠数量为 0 或 1 时,直接判断为有效排列,无需翻转。 2. 循环优化:在检查排列是否有效时,如果发现相邻珠子颜色相同,可以立即停止检查,避免不必要的计算。 3. 字符串拼接:在进行翻转操作时,使用字符串拼接 `new_arr = arr[i:] + arr[:i]`,注意拼接顺序。 [2025-07-30 17:00:55 | AI写代码神器 | 506点数解答]