当前位置: 首页 > news >正文

【题解】Luogu P13885 [蓝桥杯 2023 省 Java/Python A] 反异或 01 串

思路

对整串反异或有些唬人。但进行反异或操作的时刻是任意的,操作后依然可以往串首尾加数。也就是说,我们可以把问题转化成:一个长度为 \(|T|\) 的 01 串 \(S\),从中选取一段字串对其进行反异或操作使其变为 \(T\),求串 \(S\) 中 1 的最少数量。

异或的定义中,1 和 1 异或会变成 0,这样我们添加的 1 就浪费了,不如不异或。因此我们就要让反转前后的 1 对应 0,0 对应 1。这样一来,原串的 1 与另一半对应位置的 0 异或(反转所致,每个位置与其对于串中心对称的位置异或),异或后新串的对应位置也会变成 1。也就是说,我们在异或后新串回文,且回文中心不是 1(可以是 0 或两个字符中间)的时候,原串中 1 的个数只需要一半,减少了要从首尾添加 1 的数量。

由此一来解题的方法就很明显了:求出 \(T\) 中含 1 最多且回文中心不是 1 的回文子串中 1 的数量 \(cnt\),此时有 $ \frac{cnt}{2}$ 个 1 不用在首尾添加,答案即为 \(sum-\frac{cnt}{2}\),其中 \(sum\)\(T\) 中 1 的总数。

求回文子串显然使用 Manacher 算法,前缀和预处理 1 的数量之后,统计回文中心不为 1 的情况,取最大值计算即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=1e6+10;
int n,tot=1,ans;
int len[N*2];
int sum[2*N];
char c[N],s[N*2];
int main(){scanf("%s",c+1);n=strlen(c+1);s[0]='^';s[1]='#';for(int i=1;i<=n;i++){s[++tot]=c[i];s[++tot]='#';}for(int i=1;i<=tot;i++) sum[i]=sum[i-1]+(s[i]=='1');//前缀和处理 1 的数量,为方便计算,直接在加过标识符的串上处理 int mid=0,r=0;//Manacherfor(int i=1;i<=tot;i++){if(i<=r) len[i]=min(len[2*mid-i],r-i+1);while(s[i-len[i]]==s[i+len[i]]) len[i]++;if(len[i]+i-1>r){r=len[i]+i-1;mid=i;}}for(int i=1;i<=tot;i++){//统计最大值,回文中心 s[1] 为 0 或 #(即不为 1)时参与统计if(s[i]!='1') ans=max(ans,sum[i+len[i]-1]-sum[i-len[i]]);}ans/=2;printf("%d\n",sum[tot]-ans);return 0;
}
http://www.jsqmd.com/news/79155/

相关文章:

  • 期待回家,顺便写点年度总结
  • E No address added out of total 1 resolved地址绑定失败: No address added out of total 1 resolved errors:
  • 计算机论文题目推荐:8大平台+50例AI生成
  • 【笔记】Manacher
  • 八上期中考游记
  • C51_74HC165并口转串口
  • application.properties
  • 智能客服机器人产品设计
  • 【题解】Luogu B4185 [中山市赛 2024/科大国创杯小学组 2023] 倍数子串/子串
  • JavaScript 异常原因(Error Cause):实现分布式系统错误链追踪的序列化与反序列化
  • 毕业论文任务书范文推荐:7大平台+AI修改工具
  • Python字典与集合:解锁高效数据处理的关键,90%的人没吃透这几点
  • 天远多头借贷行业风险版API接口调用代码流程、接入方法以及应用场景
  • 详细介绍:完整事务性能瓶颈分析案例:支付系统事务雪崩优化
  • 计算机论文选题推荐:9大AI+热门方向排名
  • JavaScript 记录(Records)与 元组(Tuples):实现堆内存中不可变复合数据结构的内存布局
  • 5 分钟快速入门 Github Actions
  • 虚函数虚表
  • 线程并发编程,同步与互斥机制
  • Python列表与元组:搞懂这3个核心差异,再也不纠结用哪个
  • MQ消息队列相关知识与对比
  • 已有析音法
  • 完整教程:PPT导出为图片的格式选择:JPG与PNG的区别
  • 不能头脑简单地搞“凡是”:凡是偶数2n(n的变域是N)必∈N
  • Docker 两大基石:Namespace 和 Cgroups
  • 告别排版困境!AI 写作到发布全自动化的完整方案
  • 9、Eclipse集成开发环境:C/C++开发全流程指南
  • 享搭提醒助手:数据变动实时预警,运营者业务状态“尽在掌握”
  • Python银行客户数据流失预测SMOTE平衡数据实现神经网络、SVM、决策树、随机森林与超参数调优|附代码数据
  • 音元系统:绪论