蓝桥杯备赛:Day7- U535982 C-小梦的AB交换

📚 算法笔记:U535982 C-小梦的AB交换

1. 题目简述

U535982 C-小梦的AB交换 - 洛谷

  • 输入 :一个长度为 2 n 2n 2n 的 A B AB AB 串(包含 n n n 个 A A A 和 n n n 个 B B B)。
  • 操作 :每次可以选择任意两个位置 i , j i, j i,j 交换字符。
  • 目标 :最少操作几次,使得字符串变为交替排列(即相邻字符不同)。
  • 输出:最小交换次数。

2. 核心代码 (C++ 实现)

c++ 复制代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

void solve()
{
    int T;
    if(!(cin >> T)) return; // 读入测试组数
    
    while(T--)
    {
        ll n;
        cin >> n;
        string s;
        cin >> s;
        
        ll diff1 = 0, diff2 = 0;
        
        // 核心:遍历 2*n 长度的串
        for(int i = 0; i < 2 * n; i++)
        {
            // 构造两种目标模式:ABAB... 或 BABA...
            char target1 = (i % 2 == 0) ? 'A' : 'B';
            char target2 = (i % 2 == 0) ? 'B' : 'A';
            
            // 统计当前串与两种目标的差异点个数
            if(s[i] != target1) diff1++;
            if(s[i] != target2) diff2++;
        }
        
        // 关键结论:一次交换可以同时修复两个错误位置
        cout << min(diff1 / 2, diff2 / 2) << "\n";
    }
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);
    
    solve(); // 内部已有 T 循环,直接调用
    return 0;
}

3. 核心考点与注意事项

  • 目标模式比对 :满足条件的字符串只有两种:ABAB...BABABA...
  • 任意交换带来的简化 :由于题目允许交换任意位置,我们不需要考虑移动距离,只需要关心"有多少个位置放错了"。
  • 一次交换修两点 :因为 A 和 B 的总数固定。如果你有一个位置该放 A 却放了 B,必然在另一个位置该放 B 却放了 A。交换这两个放错的字符,可以同时修正 2 个差异位

4. 易错点回顾 (My Mistakes)

1. 单引号 vs 双引号 (语法错误)

  • 错误经历 :写成了 char target = "A";
  • 纠正 :在 C++ 中,char 必须用单引号 'A',双引号 "A" 是字符串常量,赋值给 char 会导致编译失败。

2. 变量未初始化 (运行结果错误)

  • 错误经历 :定义了 ll diff1, diff2; 但没有写 = 0
  • 后果:局部变量初始值为随机值,导致计数结果变成天文数字。
  • 纠正定义计数器时务必手动初始化为 0

3. 循环范围与读入 (逻辑错误)

  • 错误经历 :数组只开了 n 长度,或者循环只跑了 n 次。
  • 纠正 :题目给定的是 n n n 对 AB,总长度是 2 × n 2 \times n 2×n,读入和循环都必须以此为准。

4. 输出位置错误 (多组数据逻辑)

  • 错误经历 :将 cout 放在了 T 循环之外。
  • 纠正 :这是多组测试数据,每处理完一个 ns,就要立刻输出一个结果并换行。
相关推荐
杜子不疼.2 小时前
AutoGen vs CrewAI vs LangGraph:2026年 Agent 框架怎么选?
c++·microsoft
小肝一下4 小时前
每日两道力扣,day5
数据结构·c++·算法·leetcode·职场和发展·hot100
OOJO9 小时前
c++---list介绍
c语言·开发语言·数据结构·c++·算法·list
笨笨饿10 小时前
29_Z变换在工程中的实际意义
c语言·开发语言·人工智能·单片机·mcu·算法·机器人
艾为电子11 小时前
【技术帖】让接口不再短命:艾为 C-Shielding™ Type-C智能水汽防护技术解析
c语言·开发语言
会编程的土豆11 小时前
【数据结构与算法】动态规划
数据结构·c++·算法·leetcode·代理模式
迈巴赫车主12 小时前
蓝桥杯19724食堂
java·数据结构·算法·职场和发展·蓝桥杯
6Hzlia13 小时前
【Hot 100 刷题计划】 LeetCode 78. 子集 | C++ 回溯算法题解
c++·算法·leetcode
所以遗憾是什么呢?13 小时前
【题解】Codeforces Round 1081 (Div. 2)
数据结构·c++·算法·acm·icpc·ccpc·xcpc