牛客练习赛8 F题 莫队算法

题目链接题意: 给一个长为 nn 的只含小写字母的字符串 每次查询一个区间 [l,r][l,r] 内,有多少子区间可以重排为一个回文串。思路: 首先对于一个可以重排为回文串的区间,一定满足至多一个字母的出现次数为奇数,其余字母的出现次数为偶数。因为只有26个小写字母其只考虑出现次数的奇偶性,故可以考虑压位2262^{26} 表示每一个字母的出现情况。 对每一位求一个前缀和。对于一个新加入第x
摘要由CSDN通过智能技术生成

题目链接


题意:
给一个长为 n n n 的只含小写字母的字符串
每次查询一个区间 $[l,r] $内,有多少子区间可以重排为一个回文串。

思路:
首先对于一个可以重排为回文串的区间,一定满足至多一个字母的出现次数为奇数,其余字母的出现次数为偶数。

因为只有26个小写字母其只考虑出现次数的奇偶性,故可以考虑压位 2 26 2^{26} 226 表示每一个字母的出现情况。
对每一位求一个前缀和。

对于一个新加入第 x x x个字母 c h ch ch,如果已知当前区间每一个数的出现情况,则
a d d = c n t [ s u m [ x ] ] + ∑ i = 0 25 c n t [ s u m [ x ]   x o r   ( 1 < < i ) ] add = cnt[sum[x]] + \sum_{i=0}^{25} cnt[sum[x] \ xor \ (1<<i)] add=cnt[sum[x]]+i=025cnt[sum[x] x

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值