题解:P16815 [蓝桥杯 2026 国 Python B] 糖果转盘

· · 题解

solution

三个样例分别是三种可能的答案。

下文中我们将 cnt 记作字符串 s 中满足 s_i = s_{i + 1}1 \le i < ns_{n - 1} = s_0 的数量。

开始分讨。

::::info[当 cnt = 0 时]{open}

此时显然所有 n 个切口切下后展开的糖果不会出现有两颗相邻的是颜色相同的。

所以此时答案是 n

::::

::::info[当 cnt = 1 时]{open}

我们假设 s_i = s_{i + 1}。那么除了从第 i 和第 i + 1 颗糖果之间切下,其余切法都会使得 s_i = s_{i + 1}

所以此时答案是 1

::::

::::info[剩下情况]{open}

首先有 cnt \ge 2

我们先假设 s_i = s_{i + 1}s_{j} = s_{j + 1} ,这里 i \ne j

如果从第 i 和第 i + 1 颗糖果之间切下,那么一定还有 s_j = s_{j + 1},所以不是漂亮切口。从第 j 和第 j + 1 颗糖果之间切下同理。

所以此时答案是 $0$。 :::: ### code :::success[展开] ```cpp #include <bits/stdc++.h> #define debug(a) cerr << (#a) << " = " << (a) << endl; #define int long long #define maxn 100010 #define endl '\n' using namespace std; int n; string s; void solve() { cin >> n >> s; int cnt = 0; for (int i = 0; i < n - 1; i++) cnt += (s[i] == s[i + 1]); cnt += (s[n - 1] == s[0]); if (!cnt) cout << n << endl; else if (cnt == 1) cout << cnt << endl; else cout << 0 << endl; } signed main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); int t; t = 1; // cin >> t; while (t--) solve(); return 0; } ``` ::::