题解:P11361 [NOIP2024] 编辑字符串

news/2025/11/9 23:07:11/文章来源:https://www.cnblogs.com/StarLink/p/19205494

已严肃开坑真题题解合集,主要解决自己总是写完一题过一段时间又不会了的问题。

当时考这个的时候学 OI 的时间还没有我上高中以来放过的假多,不过好在没有爆零,共计得分 35pts,但是所有的分数都是这道题贡献的,就差 T3 的 5pts 省三有了。

笑点解析:重写这道题还读错题了,挠头 1h + 看了 1.5h 题解才发现这个问题,令人忍俊不禁。

不说废话了我们开始介绍解法。

原题链接

思路

注意到只有相邻的字符串才能进行交换,于是想到将字符串分段考虑。

我们按照字符是否能参与交换进行分段。在每一段里的数字是可以随便用的,我们利用前缀和计算出每一段的数字出现次数,接下来考虑怎么统计答案。

按照我们的处理方式,在都可以操作的情况下,如果两个字符串的同一个位置的字符各自所处的段里都有 0 或都有 1,那么该位置一定可以通过交换使得它们的字符相同,我们将其计入答案并将对应的数字在段内的出现次数减掉防止重复统计。

然后你可能会有疑惑,对于两个都不能交换或有一个不能交换的情况怎么办?回忆我们的分段方式好像确实没有考虑这一点,但是我们注意到如果字符不能交换,说明它是固定的和周围字符没关系,自然不能用人家的统计结果,我们就单独给它分出一段,再按照上面的方法求解即可。

代码

// 妈的写了一年才发现我读错题了
#include <bits/stdc++.h>
using namespace std;const int MN = 1e5 + 3;
int n, s[MN][2], t[MN][2], ans, p[MN][2], sum1[MN][2], sum2[MN][2];void get_in();
inline void fir() {ans = 0;get_in();
}
void solve() {cin >> n;fir();for (int i = 1; i <= n; i++) {p[i][0] = p[i - 1][0] + (!t[i][0] || !t[i - 1][0]);sum1[p[i][0]][0] += (s[i][0] == 0);sum1[p[i][0]][1] += (s[i][0] == 1);p[i][1] = p[i - 1][1] + (!t[i][1] || !t[i - 1][1]);sum2[p[i][1]][0] += (s[i][1] == 0);sum2[p[i][1]][1] += (s[i][1] == 1);}for (int i = 1; i <= n; i++) {if (sum1[p[i][0]][0] && sum2[p[i][1]][0]) {ans++;sum1[p[i][0]][0]--, sum2[p[i][1]][0]--;continue;}else if (sum1[p[i][0]][1] && sum2[p[i][1]][1]) {ans++;sum1[p[i][0]][1]--, sum2[p[i][1]][1]--;continue;}if (sum1[p[i][0]][0]) sum1[p[i][0]][0]--, sum2[p[i][1]][1]--;else sum1[p[i][0]][1]--, sum2[p[i][1]][0]--;}cout << ans << "\n";
}void get_in() {char c;for (int i = 1; i <= n; i++) {cin >> c;s[i][0] = c - '0';}for (int i = 1; i <= n; i++) {cin >> c;s[i][1] = c - '0';}for (int i = 1; i <= n; i++) {cin >> c;t[i][0] = c - '0';}for (int i = 1; i <= n; i++) {cin >> c;t[i][1] = c - '0';}
}int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int T;cin >> T;while (T--) solve();return 0;
}

碎碎念

虽然洛谷上这个题是蓝 T2 是绿,但是我个人认为这个题是比下一题简单的(因为我下一道题实现不出来),当然我也对这个难度评级没意见,毕竟每个人和每个人体感上是不一样的,加上这个题本身就看人。但是我说这些是因为今年 CSP-S 太难了感觉真和这次 NOIP 差不多。(不要骂我口牙我承认我是彩笔

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/960821.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

与某省代理商的合作,写一点感触吧

近几年,找了几个代理商合作,刚开始都挺好,但是后面都出现了问题。 大概过程 第一阶段(初期):双方达成合作,合作的挺好。 第二阶段(中期):对方变得难沟通。 1、找对方,微信不回,电话不接,说自己这几天忙什…

CSP-S 2025 解题报告

T1 社团招新 (club)考场思路 先是花了 20 分钟思考 DP 的可行性。然后我想到了反悔贪心,开始证明它的可能性或者找反例,接着我想到其实不用加一个人就反悔一次,只要先全部贪心,最后反悔即可。然而还是不会证,就直…

嵌入式面试中常见的一些编程题目 - 阿源

嵌入式面试中常见的一些编程题目注:本文只是代码实现,并没有深入讲解实现原理,大家可以看一下主要会考什么,然后再具体针对性了解原理,也更有利于理解。眼看26届秋招接近尾声,自己虽然很菜,但也在激烈的竞争中拿…

Makefile工程简单模板

一个简单的Makefile工程模板一个简单的Makefile工程模板 # 定义目标文件名 TARGET ?= bsp# 编译器选项 CROSS_COMPILE ?= arm-linux-gnueabihf- CC := $(CROSS_COMPILE)gcc LD := $(CROSS_COMPILE)ld OB…

实用指南:Visual Studio下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了

实用指南:Visual Studio下载安装教程(非常详细)从零基础入门到精通,看完这一篇就够了pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !importan…

升鲜宝 供应链SCM 一体化自动化部署体系说明

升鲜宝 SCM 一体化自动化部署体系说明🚀 升鲜宝 SCM 一体化自动化部署体系说明 作者:杭州升鲜宝科技有限公司 版本:v1.0 日期:2025-11-09🧱 一、部署体系总览 本部署体系用于在服务器上一键完成: • ✅ 前端自…

折腾笔记[37]-使用ML.NET进行文本情感分类

使用.NET框架的ML.NET深度学习框架训练数据集并进行文本情感分类.摘要 使用.NET框架的ML.NET深度学习框架训练数据集并进行文本情感分类. 关键信息.net8原理简介 ML.NET简介 [https://www.nuget.org/packages?page=2&…

从API调用到智能体编排:GPT-5时代的AI开发新模式 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Spring AI Alibaba 项目源码学习(一)-整体介绍

Spring AI Alibaba 项目目录结构说明 请关注微信公众号:阿呆-bot 项目概述 Spring AI Alibaba 是一个多模块 Maven 项目,采用分层架构设计,从底层到上层依次为:Graph 核心运行时、Agent 框架、Studio 应用和 Sprin…

技术架构师到CIO如何转型

目录第一阶段:从“技术实现者”到“业务理解者”——支撑“提高运营效率(操作层)”修炼重点:第二阶段:从“业务支持者”到“管理赋能者”——支撑“加强运营管控(管理层)”修炼重点:第三阶段:从“管理赋能者”…

Layout

1,gen4速度或以上的差分需要在经过阻容焊盘,芯片pin脚,连接器pin脚挖空参考层再隔层补地,改善阻抗。

OS 任务调度

1 什么是任务调度?操作系统为什么需要它? 任务调度是决定哪个任务在何时使用CPU的过程。因为CPU核心数量远少于需要运行的任务(进程/线程)数,需要通过调度来公平、高效地分配计算资源,实现多任务并发/并行的假象…

【Linux】初始线程 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

对于多个图片如何喂给大模型

对于多个图片如何喂给大模型解决办法就是是使用claude和gemini识别图片内容格式化输出后用纯文字输出

Spring Boot + JWT + jjwt 建立前后端分离登录认证(详细教程 + 工具类封装)入门教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

python:pip配置国内源

一,创建目录 说明:是在用户的home目录下创建 liuhongdi@liuhongdi-pc:~$ mkdir .pip liuhongdi@liuhongdi-pc:~$ cd .pip liuhongdi@liuhongdi-pc:~/.pip$ vi pip.conf 二,在配置文件中添加国内源 pip.conf的内容: …

nest目录结构

NestJS目录结构 1. NestJS目录结构 user: nestjs如何组织目录结构assistant: 当然!在 NestJS 中,组织良好的目录结构对于项目的可维护性、可扩展性和团队协作至关重要。虽然没有唯一的“正确”答案,但社区已经形成了…

第十一届中国大学生程序设计竞赛 女生专场(CCPC 2025 Womens Division)题解

目录Problem A. 环状线Problem B. 爬山Problem C. 短视频Problem D. 网络改造Problem E. 购物计划Problem F. 丝之歌Problem G. 最大公约数Problem H. 缺陷解码器Problem I. 调色滤镜Problem J. 后鼻嘤Problem K. 左儿…

什么?从分子变化到四大关键特征解析就是重排反应

什么?从分子变化到四大关键特征解析就是重排反应2025-11-09 22:41 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; displa…

高三日记

开坑于 \(11.9\)。 一模考完终于有时间写一下了,先补一下历次考试战绩吧。 G12 名校协作体(\(9.1 \sim 9.2\)) 退役 \(1.5\) 个月,目标是上一下特控线。 语文考完直接破防了。 数学屁也不会。 英语听力错三个,根本…