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,