题解:B4377 [蓝桥杯青少年组省赛 2025] 平衡奇偶位置的字符交换
![题解:B4377 [蓝桥杯青少年组省赛 2025] 平衡奇偶位置的字符交换](/_astro/B4377.Cbgc-UNy_1GdffL.webp)
464 字
2 分钟
题解:B4377 [蓝桥杯青少年组省赛 2025] 平衡奇偶位置的字符交换
考场做法逆天,结果发现是正解……
卡卡常(其实也没怎么卡)直接最优解榜一(查看时间:2025/08/12 09<08>08>)
先说结论:令奇数位的 A 有 个,偶数位的 A 有 个,那么如果 是奇数那么无解,否则答案是 。
为什么呢?其实证明也很简单。
首先我们发现题目只和字母 相关,而且关键在于奇数位的 A 和偶数位的 A,于是我们分别对其计数。
然后我们考虑操作会产生什么影响。
每次可以选择交换两个位置相邻的字符。——题目
相邻的两个数显然是一奇一偶,而交换这两个只可能是奇数位换到偶数位(或偶数换到奇数位)。
这样就可以让奇数的数量减少一个,偶数增加一个(或者反过来)。
一个加一,另一个减一,它们的差当然是减少 了。而且每次操作都会减少 ,因为必然是奇换偶或偶换奇。因此得到了上面的结论,证毕。
带注释 AC Code:
#include <bits/stdc++.h>
using namespace std;
int a, b, n; // a 是偶数位,b 是奇数位,n 是字符串长度string s;
int main() { ios::sync_with_stdio(false); cin.tie(0), cout.tie(0); cin >> s; n = s.size(); for (int i = 0;i < n;++i) if (s[i] == 'A') { // 注意到和 B 无关因此要判断 if (i % 2) ++b; // %2 余 0 就是 false,余 1 就是 true,正好分别对应偶数和奇数 else ++a; } if ((abs(b - a)) % 2) cout << -1 << endl; // 不知道谁大谁小,因此要取绝对值 else cout << ((abs(b - a)) >> 1) << endl; // 右移 1 位相当于除以 2,因为是非负数所以和 / 2 没有区别 return 0;}理解万岁!
支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!
题解:B4377 [蓝桥杯青少年组省赛 2025] 平衡奇偶位置的字符交换
https://www.leo2011.eu.org/posts/luogu-b4377/相关文章智能推荐
1
题解:B4400 [蓝桥杯青少年组国赛 2025] 第五题
题解讲解了如何分别使用 DFS 和 BFS 解决 2025 年蓝桥杯青少年组国赛的第五题。
2
题解:P12290 [蓝桥杯 2024 国 Java A] 基因组合
题解讲解了如何用 01 Trie 解决洛谷 P12290。
3
题解:P15290 [MCO 2023] Two Pointers (easy version)
题解讲解了如何解决洛谷 P15290。
4
【附 Hack 数据及原理】 题解:P1195 口袋的天空
题解洛谷 P1195 的题解。积木鱼 作为传奇击杀王曾利用 5 组数据 Hack 本题 22 篇题解,这里给出两种能通过目前全部数据且时间复杂度正确的做法。
5
题解:P9704 「TFOI R1」Tree Home
题解带有完整推公式过程的洛谷 P9704 「TFOI R1」Tree Home 一题题解,使用 ST 表。
随机文章随机推荐













