ABC295 D题 题解
题意简述
给定一个长度不超过\(\;5\times 10^5\;\)的,仅有数字构成的字符串,问存在多少段子串,使得子串内字符重新排序后,前半段与后半段相同?
做法分析
重组后前后两部分相同,其实也就意味着,这一子串内所有数字出现的次数都为偶数次。
考虑暴力竹筏,枚举左端点和右端点,统计子串内每个数字出现次数,判断是否都为偶次。但是这样达到\(O(n^3)\)级别,效率过低。
可以利用前缀和的思想进行优化,对于每一位 i,统计从第一位到这一位每个数字 x 出现的次数 \(num_{i,x}\) ,而子串 \((L, R)\) 内数字 x 出现次数为偶次,等价于 \(num_{R, x}\) 减 \(num_{L-1, x}\) 为偶次,等价于 \(num_{R, x}\) 和 \(num_{L-1, x}\) 的奇偶性相同。
这时可以发现,其实出现了几次并不重要,重要的是出现次数的奇偶性,那就可以把每一位的状态值整合成一个二进制下,十位的,由 0 和 1 组成的数字。而出现的每个数字奇偶性相同等价于状态值相同。
那做法就很明了了,从前往后统计每一位的状态值,将答案加上这一状态值之前出现的次数,最后在将这一状态值出现次数加 1 。
参考代码
#include <bits/stdc++.h>
using namespace std;
string s;
long long ans, now;
map<long long, int> m;
int main()
{
cin >> s;
m[0] = 1; //注意:第零位,每种数字都没出现也要计算,因为从第一位到第 x 位实际上是要判断第 0 位和第 x 位的状态值
for(int i = 0;i < s.size(); i++)
{
int x = s[i] - '0';
now ^= 1 << x;
ans += m[now];
m[now]++;
}
cout << ans;
return 0;
}
ABC295 D题 题解的更多相关文章
- ACM ICPC 2018 青岛赛区 部分金牌题题解(K,L,I,G)
目录: K Airdrop I Soldier Game L Sub-cycle Graph G Repair the Artwork ———————————————————— ps:楼主脑残有点严 ...
- 10.9 guz模拟题题解
感谢@guz 顾z的题题解 考试共三道题,其中 第一题help共10个测试点,时间限制为 1000ms,空间限制为 256MB. 第二题escape共20个测试点,时间限制为1000ms2000ms, ...
- 【ZROI 537】贪心题 题解
[ZROI 537]贪心题 题解 Link Solution 最大的一边直接放到一起贪心即可 着重讲小的一边 已知对于二分图匹配,其答案即为最大流 令时间集合为 \(T = {1,2,3,\dots, ...
- Codeforces Round #612 (Div. 2) 前四题题解
这场比赛的出题人挺有意思,全部magic成了青色. 还有题目中的图片特别有趣. 晚上没打,开virtual contest打的,就会前三道,我太菜了. 最后看着题解补了第四道. 比赛传送门 A. An ...
- Hello2020(前四题题解)
Hello,2020!新的一年从快乐的掉分开始…… 我在m3.codeforces.com这个镜像网站中一开始还打不开D题,我…… 还有话说今天这场为什么那么多二分. 比赛传送门:https://co ...
- Codeforces Round #524 (Div. 2)(前三题题解)
这场比赛手速场+数学场,像我这样读题都读不大懂的蒟蒻表示呵呵呵. 第四题搞了半天,大概想出来了,但来不及(中途家里网炸了)查错,于是我交了两次丢了100分.幸亏这次没有掉rating. 比赛传送门:h ...
- Educational Codeforces Round 53 (Rated for Div. 2) (前五题题解)
这场比赛没有打,后来补了一下,第五题数位dp好不容易才搞出来(我太菜啊). 比赛传送门:http://codeforces.com/contest/1073 A. Diverse Substring ...
- Lyft Level 5 Challenge 2018 - Final Round (Open Div. 2) (前三题题解)
这场比赛好毒瘤哇,看第四题好像是中国人出的,怕不是dllxl出的. 第四道什么鬼,互动题不说,花了四十五分钟看懂题目,都想砸电脑了.然后发现不会,互动题从来没做过. 不过这次新号上蓝名了(我才不告诉你 ...
- Codeforces Round #519 by Botan Investments(前五题题解)
开个新号打打codeforces(以前那号玩废了),结果就遇到了这么难一套.touristD题用了map,被卡掉了(其实是对cf的评测机过分自信),G题没过, 700多行代码,码力惊人.关键是这次to ...
- Good Bye 2019(前五题题解)
这套也是后来补得. 我太菜了,第三题就卡着了.想了好久才做出来,要是参加了绝对掉分. D题是人生中做完的第一道交互题,不容易. 比赛传送门 A.Card Game 题目大意:一共有n张互不相同的牌,玩 ...
随机推荐
- markdown插入图片、音频视频
1.markdown 简介 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档. Markdown 编写的文档后缀为 .md, .markdown 简单易学容易上手,十 ...
- 文心一言 VS chatgpt (4)-- 算法导论2.2 1~2题
一.用O记号表示函数(n ^ 3)/1000-100(n^2)-100n十3. 文心一言: chatgpt: 可以使用大 O 记号表示该函数的渐进复杂度,即: f ( n ) = n 3 1000 − ...
- 整合vxgPlayer使chrome支持vxg_media_player播放rtsp视频
目前有一个关于接入海康监控进行视频融合的项目需求,按理说在前端技术发展如此迅速的今天,使用web播放一个视频应该是不算什么难事,只是万事都有意外,因很多视频厂家的监控数据都不是普通的mp4啥的,所以使 ...
- Python基础 - 比较运算符
以下假设变量a为10,变量b为20: 运算符 描述 实例 == 等于 - 比较对象是否相等 (a == b) 返回 False. != 不等于 - 比较两个对象是否不相等 (a != b) 返回 tr ...
- 使用yaml进行数据驱动
一.需求描述 1.请求登陆接口,从登陆接口的响应头数据中获取token值,并写入yml文件: 2.读取写入yml文件中的token值作为下个接口的传参,请求查询物料列表接口,查看查询结果. yaml_ ...
- 自然语言处理 Paddle NLP - 词法分析技术及其应用
词法分析就是利用计算机对自然语言的形态(morphology) 进行分析,判断词的结构和类别等."简单而言,就是分词并对每个词进行分类,包括:分词.词性标注.实体识别三个任务 问答 知识图谱 ...
- docker安装LuaJIT WEB应用防火墙
安装包请见 https://www.jianshu.com/p/b81656764613 Dockerfile #FROM ubuntu FROM centos MAINTAINER G00G1S C ...
- 使用Git进行版本控制和协作:代码共享、协作和版本管理
目录 引言 Git 是一款开源的分布式版本控制系统,它已经成为了现代软件开发中必不可少的工具之一.在这篇文章中,我们将介绍如何使用 Git 进行版本控制和协作,以实现代码共享.协作和版本管理.Git ...
- RLHF技术在智能金融中的应用:提高金融智能化和自动化水平”
目录 引言 随着人工智能技术的不断发展和普及,金融智能化和自动化水平也得到了显著提高.在这个时代,RLHF(Reinforcement Learning with Human Feedback)技术已 ...
- LLM技术在自然语言处理中的实践与改进
目录 <LLM技术在自然语言处理中的实践与改进> 引言 自然语言处理 (NLP) 是人工智能领域的一个重要分支,它研究如何将计算机程序与人类语言进行交互,从而理解.分析.生成和翻译文本.近 ...