11.22 NOIP 模拟赛 T1. 破乱的诗歌

news/2025/11/25 15:43:27/文章来源:https://www.cnblogs.com/YzaCsp/p/19268733

思路

场上考虑的其实很有道理来着

考虑左右字符集已经相同的情况是简单的
否则一定要把左右字符集调整到相同

那我们首先不难发现一个至少要使用的区间, 计算方法比较复杂, 但是宗旨是把左右字符集调整到相同且可匹配的必要花费
然后我们应该拓展长的那一端, 直到字符集相同之后可以考虑断开, 以此来获得最优解

#include <bits/stdc++.h>
#define int long long
#define rs rrt, mid + 1, r
#define mid ((l + r) >> 1)
#define ls lrt, l, mid
#define lrt rt << 1
#define rrt lrt | 1char s[1000005];
std::vector <int> pos[26];
int n, cnt[26], num[26], id[26];
int ans = 0, m;signed main () {scanf("%lld%s", &n, s + 1); m = (n + 1) / 2;for (int i = 1; i <= n; i++) cnt[s[i] - 'a']++;for (int i = 1; i <= n; i++) pos[s[i] - 'a'].push_back (i);int L = n / 2 + 1, R = m;memset (num, 0, sizeof num);for (int i = 1; i <= n / 2; i++) num[s[i] - 'a']++;for (int i = 0; i < 26; i++) if (num[i] > cnt[i] / 2)L = std::min (L, pos[i][cnt[i] / 2]);memset (num, 0, sizeof num);for (int i = n; i > m; i--) num[s[i] - 'a']++;for (int i = 0; i < 26; i++) if (num[i] > cnt[i] / 2)R = std::max (R, pos[i][cnt[i] / 2 - 1]);ans = R - L + 1;/*先换过来*/std::vector<int> chg1, chg2; chg1.clear(), chg2.clear();memset (num, 0, sizeof num);for (int i = 1; i <= n / 2; i++) num[s[i] - 'a']++;for (int i = 1; i <= n / 2; i++) if (num[s[i] - 'a'] > cnt[s[i] - 'a'] / 2) chg1.push_back(i), num[s[i] - 'a']--;memset (num, 0, sizeof num);for (int i = n; i > m; i--) num[s[i] - 'a']++;for (int i = n; i > m; i--) if (num[s[i] - 'a'] > cnt[s[i] - 'a'] / 2) chg2.push_back(i), num[s[i] - 'a']--;for (int i = 0; i < chg1.size(); i++) { int p1 = chg1[i], p2 = chg2[i]; std::swap(s[p1], s[p2]); }memset (num, 0, sizeof num);for (int i = 1; i <= n / 2; i++) num[s[i] - 'a']++;for (int i = n; i > m; i--) num[s[i] - 'a']--;int ccnt0 = 0;for (int i = 0; i < 26; i++) ccnt0 += (num[i] == 0);
//    std::cout << ccnt0 << ' ';if (R - m > n / 2 - L + 1) {
//        std::cout << "#1: ";int len = R - m;memset (num, 0, sizeof num);int cnt0 = 0;for (int i = m + 1; i <= R; i++) num[s[i] - 'a']++;for (int i = n / 2 - len + 1; i <= n / 2; i++) num[s[i] - 'a']--;for (int i = 0; i < 26; i++) cnt0 += (num[i] == 0);int l = n / 2 - len + 1, r = R;while (cnt0 != 26 && l > 1 && r < n) {l--, r++; if (s[l] != s[r]) {if (num[s[l] - 'a'] == 0) cnt0--;if (num[s[r] - 'a'] == 0) cnt0--;if (++num[s[l] - 'a'] == 0) cnt0++;if (--num[s[r] - 'a'] == 0) cnt0++;}ans++;}while (l > 1 && r < n) {l--, r++;if (s[l] != s[r]) {num[s[l] - 'a']++, num[s[r] - 'a']--; cnt0 = 24;ans++;while (cnt0 != 26 && l > 1 && r < n) {l--, r++; if (s[l] != s[r]) {if (num[s[l] - 'a'] == 0) cnt0--;if (num[s[r] - 'a'] == 0) cnt0--;if (++num[s[l] - 'a'] == 0) cnt0++;if (--num[s[r] - 'a'] == 0) cnt0++;}ans++;}}}printf("%lld", ans);} else {
//        std::cout << "#2: ";int len = n / 2 - L + 1;memset (num, 0, sizeof num);int cnt0 = 0;for (int i = m + 1; i <= m + len; i++) num[s[i] - 'a']--;for (int i = L; i <= n / 2; i++) num[s[i] - 'a']++;for (int i = 0; i < 26; i++) cnt0 += (num[i] == 0);int l = L, r = m + len;// std::cout << l << ' ' << r << '\n';while (cnt0 != 26 && l > 1 && r < n) {l--, r++; if (s[l] != s[r]) {if (num[s[l] - 'a'] == 0) cnt0--;if (num[s[r] - 'a'] == 0) cnt0--;if (++num[s[l] - 'a'] == 0) cnt0++;if (--num[s[r] - 'a'] == 0) cnt0++;}ans++;}while (l > 1 && r < n) {l--, r++;if (s[l] != s[r]) {num[s[l] - 'a']++, num[s[r] - 'a']--; cnt0 = 24;ans++;while (cnt0 != 26 && l > 1 && r < n) {l--, r++; if (s[l] != s[r]) {if (num[s[l] - 'a'] == 0) cnt0--;if (num[s[r] - 'a'] == 0) cnt0--;if (++num[s[l] - 'a'] == 0) cnt0++;if (--num[s[r] - 'a'] == 0) cnt0++;}ans++;}}}printf("%lld", ans);}return 0;
}

总结

你说的对, 但是码量真大吧

这个有点吃状态的

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

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

相关文章

莆田一对一家教辅导榜单更新:2025口碑最好的补习机构

“孩子数学成绩两个月里从70分滑向50分,我们换了4家辅导机构,结果‘名师’只会念PPT,‘定制’方案是通用模板。” 这是莆田城厢区一位家长的真实经历,也道出了无数家庭的沉默焦虑。他的孩子正值高一,物理成绩一直…

C++ - 简单实现std::unique_ptr

我们手动实现一个简化版的unique_ptr,它将拥有独占所有权,并且支持移动语义,但不支持拷贝语义。我们将实现以下功能:构造函数:从原始指针构造析构函数:释放资源移动构造函数:转移所有权移动赋值运算符:转移所有…

学习Linux需要买云服务器吗

学习Linux是否需要买云服务器?核心结论+场景化建议 核心结论:学习Linux不是必需买云服务器,但云服务器能显著提升学习效率和实用性——新手可先从本地环境入门,有公网/生产级需求时再入手,性价比最高。 一、先判断…

优化脚本

/*Auto parameter adjustment 5.0 for dm8* [Dec. 3, 2024 ] Take effect after restart dmserverAdjusted by WYL * Take effect after restart dmserverLog 2022/07/13 新增MAX_SESSION_MEMORY为2048 2024/12/05 修改…

黑白调E3 Pro:以超 300 项专利与顶尖人体工学,重塑玩家竞技体验

黑白调E3 Pro:以超 300 项专利与顶尖人体工学,重塑玩家竞技体验 当电竞玩家在虚拟战场中连续鏖战数小时,起身时腰颈的酸痛、手臂的麻木,如同无形的枷锁,束缚着竞技的热情与身体的舒适,这是众多玩家共同的“战斗后…

漳州一对一辅导机构终极榜单:2025最新十大辅导机构实力排名

“花出去的是学费,耗不起的是孩子的黄金提分期。”漳州芗城区王女士的这句吐槽,戳中了无数家长的痛点。她的孩子高二时数学成绩从110分骤跌至80分,短短三个月内,先后尝试了线下辅导班、线上大班课等三种形式,结果…

广西一对一辅导机构终极评测:贺州、河池、来宾、崇左等地区2025补习机构权威评测优选

“耽误的不是补课费,是孩子不可逆的升学关键期。” 这是贺州八步区张女士在家长群的无奈吐槽,道出了无数广西家庭的教育焦虑。她的孩子初二数学成绩从80分跌至65分,半年内辗转河池金城江、来宾兴宾区3家辅导机构,却…

2025 最新推荐!常州连接线线束厂家权威榜单:品控标准、定制能力与头部合作案例全景测评 LED / 电动工具 / 汽车零部件 / 家用电器电子连接线线束 / 汽车专用线束公司推荐

引言 在智能短途出行、智能家居、工业自动化等领域高速发展的背景下,连接线线束作为设备核心 “神经网络”,其品质直接决定终端产品的稳定性与使用寿命。据国际电子连接协会(IECIA)最新测评数据显示,全球线束行业…

2025 年打包带源头厂家最新推荐榜:ISO 认证 + 日产 20 吨级实力厂商,物流仓储优选权威榜单高亮打包带/塑钢打包带/PP 打包带/PET 打包带/纯新料打包带厂家推荐

引言 在全球化物流、制造与仓储行业的持续扩张中,打包带作为货物安全运输的核心耗材,其品质直接决定运输损耗率与综合成本。据国际包装技术协会(IPTA)2024 年度报告显示,全球打包带市场规模已达 78.5 亿美元,预计…

MATLAB实现光谱数据预处理

MATLAB实现光谱数据预处理,涵盖噪声去除、基线校正、散射校正等核心步骤,结合小波变换、Savitzky-Golay滤波等先进算法:一、光谱预处理流程框架二、核心预处理方法实现 1. 噪声去除(小波变换+中值滤波) function …

9 OpenCV中的形态学

目录OpenCV中的形态学形态学图像处理图像的二值化OpenCV腐蚀作用api获取形态学卷积核OpenCV膨胀开运算闭运算形态学梯度顶帽运算黑帽运算 OpenCV中的形态学 什么是形态学基于图像形态进行处理的一些基本方法 这些处理方…

2025 年 11 月法兰绒面料厂家推荐排行榜,法兰绒布料,双面法兰绒,优质法兰绒面料,柔软保暖与高性价比之选

2025 年 11 月法兰绒面料厂家推荐排行榜,法兰绒布料,双面法兰绒,优质法兰绒面料,柔软保暖与高性价比之选 随着纺织行业技术升级和消费需求多元化,法兰绒面料凭借其独特的柔软触感、优越保暖性能及多样化应用场景,…

告别稀疏发际线!2025值得入手的防脱洗发水推荐,根源防脱告别掉发

在当今快节奏生活中,脱发问题正呈现年轻化与复杂化特征,职场高压导致的脱发占比显著提升,季节性脱发持续时间也有所延长。随着护发意识的提升,大家在选择洗发产品时,也开始认真查看成分表,关注实际使用效果和他人…

用python实现简单的机器学习

接下来我用Python来训练一个能识别各种花的AI示例,整个过程就像教小朋友认水果一样直观,最后让你理解什么是机器学习。 准备工作:安装必要的工具 安装以下Python库: pip install numpy pandas matplotlib scikit-l…

1125noip模拟赛

尽力了,他们都太牛了,xyj说300是大众分() 8:00 写完T1 8:30 看完T2,感觉T2很可做 9:30 先把T3 k=2,t=0 的写完了,又去想T2 10:00 没有想到T2该怎么做,只是想到了几个部分分的写法 11:00 继续冲T2,成功冲出来了…

2025 年 11 月珊瑚绒厂家推荐排行榜,珊瑚绒布料,珊瑚绒面料,珊瑚绒布,双面珊瑚绒,柔软亲肤保暖面料公司精选

2025 年 11 月珊瑚绒厂家推荐排行榜,珊瑚绒布料,珊瑚绒面料,珊瑚绒布,双面珊瑚绒,柔软亲肤保暖面料公司精选 随着纺织技术的不断进步和消费者对舒适性要求的提高,珊瑚绒类面料在服装、家居和装饰等领域的应用日益…

2025年学历提升、成人学历、专升本、自考本科、高起专服务机构综合评测与精选推荐

摘要 随着终身学习理念的深入和职业发展需求的提升,2025年成人学历教育行业迎来快速发展期。本文基于市场调研和用户反馈,整理出十家值得关注的成人学历服务商推荐清单,排名不分先后,仅作参考。特别说明:本推荐榜…

如何通过机器学习(如K-means、SVM、决策树)与深度学习(如CNN、LSTM)模型,进行全球气候变化驱动因素的数据分析与趋势预测 - 详解

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

yymodel 某个属性当iOS以int接受 而接口返回null,json解析会崩溃不

使用 YYModel 时,如果接口返回 null而 iOS 端用 int类型接收,​​不会崩溃,但会有默认值​​。 YYModel 的处理机制 1. 基本数据类型(int/NSInteger等) @interface User : NSObject @property (nonatomic, assign…

2025年穿线磁珠编带磁环制造企业权威推荐榜单:铁氧体磁环/非晶纳米晶磁环/磁环源头厂家精选

穿线磁珠与磁环作为电路电磁兼容性(EMC)保护的核心元件,其性能直接关系到电子设备的稳定性和可靠性。在电子元器件领域,编带包装是实现自动化生产的关键环节。以下将基于技术实力、产品特性及市场应用等客观维度,…