新闻详情

新闻详情

首页 / 资讯中心 / 详情

【题解】Codeforces 2260 E. Cyclic Balance

发布时间:2026/9/27 22:56:12来源:尧图网络
【题解】Codeforces 2260 E. Cyclic Balance
涉及知识点前缀和我发现我这个想法比官方题解的时间复杂度更低且更容易理解一点分享一下题目大意给定一个长度为 n 的 01 二进制串 s定义字符串的循环平衡状态在它的相邻字符对中00,01,10,11 这四类字符对的数量全部相等并且头尾相邻。共 q 次询问每次给出区间 ( lr ) 一个字串每一次我们可以在子串的任何位置插入一个0或1求对应子串达到循环平衡状态的最小代价。先给个链接Educational Codeforces Round 194 (Div. 2) E. Cyclic Balance核心思路首先我们可以知道一个头尾相连的字符串相邻对数就等于该字符串的长度而要达成题目中所要求的循环平衡状态四种字符对的数量必须相等也就是说我们目标字符串肯定得是 4 的倍数。假设子串长为 m一个字符对出现的次数是 T 次那么目标字符串总长为 4T 。我们需要插入的字符数量就为 4T - m 个。对于所有符合要求的最小四单元子串0011011011001001 我们可以发现本质上就是 0011的循环位移。因此任何长度为 4T 的循环平衡串本质上都可以看作是由 T 个 0011 单元拼接而成的。对于每一个 [l, r] 的区间我们用以下字母统计各字符对的数量a子串中00字符对的数量b子串中11字符对的数量c子串中01或10字符对的数量每一个0011子串单元有以下要求1 个00字符对1 个11字符对1 个01字符对1 个10字符对。由于我们只能插入字符问题就转化成了我们最少需要多少个0011积木单元才能满足所有的条件。约束条件在一个包含01字符对的串中因为首尾相连形成了闭环所以 01 字符对和 10 字符对的数量是相等的对于一个子串lr我们可以预处理出相邻对 01 和 10 的字符对有多少个。假设加上 a[ l ] 和 a[ r ] 是否也是由 0 到 1总共有 d 个字符对那么 01 字符对就有 d / 2 个这里我们记为 c 个 那么我们至少需要 c 个字串单元所以T c。记区间内含 0 的字符对数量为 cnt0 因为含 0 开头的字符串有00、01所以字符对 00 的数量 a 为 cnt0 - c。每个单元至少有两个所以T 记区间内含 1 的字符对数量为 cnt1 因为含 1 开头的字符串有10、11所以字符对 11 的数量 b 为 cnt1 - c。每个单元至少有两个所以T 由于一个子串一定要包含三个字符对a, b, cT 对于上述4个条件由于必须全部都要满足我们应取四个限制条件的 max 这样才是满足所有条件的最小的 T max( t1, t2, t3, t4 )具体实现为了快速求出任意区间 [l, r] 的 cnt1 和01变换次数 d我们预处理两个前缀和数组pre[i]前 i 个字符中1的个数。通过pre[r] - pre[l-1]即可 O(1) 得到区间内 1 的个数 cnt1。pre_diff[i]前 i 个字符中满足 s[i] ! s[i-1] 的相邻位置数量。通过pre_diff[r] - pre_diff[l-1]得到区间内相邻字符不同的次数再结合端点 s[l] 与 s[r] 的关系即可得到 01 变换次数 d。AC代码时间复杂度 O(n q) 官题解是O(n qlogn)#include bits/stdc.h using namespace std; #define int long long #define endl \n typedef pairint,int PII; const int INF0x3f3f3f3f3f3f3f3f; int cal(int a, int b, int c){ int t1 c; int t2 (a c 1) /2; int t3 (b c 1) /2; int t4 (a b c 2) / 3; return max({t1,t2,t3,t4}); } void solve() { int n, q; cin n q; vectorint pre(n 1), pre_diff(n 1); string s; cin s; s s; for(int i 1; i n; i){ pre[i] pre[i - 1] (s[i] - 0); if(i 1) pre_diff[i] pre_diff[i - 1] (s[i] ! s[i - 1]); } while(q--){ int l, r; cin l r; int cnt1 pre[r] - pre[l - 1]; int cnt0 r - l 1 - cnt1; int d pre_diff[r] - pre_diff[l - 1]; d (s[r] ! s[l]); int c d/2; int a cnt0 - c; int b cnt1 - c; int cnt cal(a, b, c); cout 4 * cnt - (r - l 1) endl; } } signed main(){ ios::sync_with_stdio(0); cin.tie(0); int t 1; // cin t; while(t--){ solve(); } return 0; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

中山网站建设制作.超凡科技新手入门:3招避开改需求拖一周的坑 2026/9/28 0:33:18

中山网站建设制作.超凡科技新手入门:3招避开改需求拖一周的坑

中山网站建设制作.超凡科技新手入门:3招避开改需求拖一周的坑 改个需求建站公司拖一周?别忍了,这不仅是效率问题,更是技术债在爆发。很多中山的老板和新手在找【中山网站建设制作.超凡科技】这类团队时,往往只盯着价格,却忽略了底层架构的灵活性,结…

阅读更多 →
不同网站相似的页面百度收录吗适合什么场景 2026/9/28 0:33:11

不同网站相似的页面百度收录吗适合什么场景

懂行老手揭秘:不同网站相似页面百度收录吗?别被建站报价忽悠 找建站公司最怕什么?不是功能做不出来,是怕花大价钱买了个“百度不收录”的壳子。很多老板拿着报价单问:“为什么你们报价8000,隔壁才3000?”老手心里苦啊,这3000块的站,代码…

阅读更多 →
本地建设网站软件下载避坑指南:5个核心注意事项 2026/9/28 0:32:52

本地建设网站软件下载避坑指南:5个核心注意事项

本地建设网站软件下载避坑指南:5个核心注意事项 模板网站太丑不够用,这是无数初创企业和独立开发者踩过的坑。当你决定放弃那些千篇一律的SaaS模板,转向本地化部署或源码开发时,“本地建设网站软件下载”就成了绕不开的第一步。别急着去下载站乱点鼠…

阅读更多 →
网页微信下载避坑指南:3步识别高危钓鱼陷阱 2026/9/28 0:32:46

网页微信下载避坑指南:3步识别高危钓鱼陷阱

网页微信下载避坑指南:3步识别高危钓鱼陷阱 找建站公司怕被坑高价?别只盯着报价单看,真正的坑往往藏在“功能实现”的细节里。很多甲方对接人为了图省事,直接让开发团队接入“网页微信下载”或类似快捷登录功能,结果上线后没几天,用户数据就被拖库,服…

阅读更多 →
WordPress删除全部评论要花多少钱?新手避坑指南 2026/9/28 0:32:27

WordPress删除全部评论要花多少钱?新手避坑指南

WordPress删除全部评论要花多少钱?新手避坑指南 网站突然被黑,后台全是垃圾评论,甚至页面挂满暗链,这种绝望感老站长都懂。很多新手第一反应是问:处理这个安全问题,彻底清除并防止复发,到底要 多少钱…

阅读更多 →
微信朋友圈的网站连接怎么做详细步骤 2026/9/28 0:31:55

微信朋友圈的网站连接怎么做详细步骤

3步搞定微信朋友圈的网站链接,避开挂马坑用免费工具 昨天凌晨,后台突然跳出警报:官网被植入了一段恶意JS代码,导致打开页面直接跳转博彩网站。那一刻心真的凉半截,这种网站被黑挂马不知道怎么办的心情,谁经历过谁懂。别慌,先别急着重启服务器,打开…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉