【二分】【哈希】ANT-Antisymmetry

博客介绍了如何利用哈希和二分法解决一种特殊类型的字符串问题——找到反对称字符串的子串。通过对给定长度为N的01字符串进行分析,博主提出当字符串及其反转取反后的串相同时,该字符串为反对称。通过枚举中心并检查子串是否为回文,结合哈希技术高效地找出所有反对称子串的数量。
摘要由CSDN通过智能技术生成

ANT-Antisymmetry

题目

对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。比如00001111和010101就是反对称的,1001就不是。

现在给出一个长度为N的01字符串,求它有多少个子串是反对称的。

输入

第一行n
第二行n个01字符串

输出

它有多少个子串是反对称的

输入样例

8
11001011

输出样例

7

解题思路

其实这道题就是一道哈希加二分,推出来可以得出反过来的01串加上原本的可以发现是一个回文,那么就很好解决了。枚举中心,不断的看k格,然后就哈希看是否为回文即可.

程序如下

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#define ll long long 
const ll math=2000001001;
using namespace std;
int n,j,l,r,mid,maxn;
ll hx[500001],re[500001],hxx[500001],ans;
char a[500001];
bool check(int l,int r,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值