[bzoj2084][POI2010]ANT-Antisymmetry(二分+hash)
2017-10-18 18:48
381 查看
题目:
我是超链接题解:
这种二分题目主要考虑单调性,O(nlogn) 还是资瓷的我们可以枚举对称的中心,然后二分长度加到一起,如果小的都不能对称,那更大的肯定不能对称
代码:
#include <cstdio> #include <iostream> #include <cstring> #define ull unsigned long long using namespace std; const int N=5e5; const int p=1300000001ull; char st[N+5]; ull H1[N+ 4000 5],H2[N+5],mi[N+5]; bool check(int l,int r,int mid) { ull x=H1[r]-H1[l-1]*mi[r-l+1]; ull y=H2[l]-H2[r+1]*mi[r-l+1]; if (x==y) return 1;else return 0; } int main() { int n,i,ans=0; scanf("%d",&n);scanf("%s",st+1); mi[0]=1; for (i=1;i<=n;i++) mi[i]=mi[i-1]*p; for (i=1;i<=n;i++) H1[i]=H1[i-1]*p+st[i]-'0'; for (i=n;i>=1;i--) H2[i]=H2[i+1]*p+(!(st[i]-'0')); for (i=1;i<=n;i++) { int l=1,r=min(i,n-i),cnt=0; while (l<=r) { int mid=(l+r)>>1; if (check(i-mid+1,i+mid,mid)) cnt=mid,l=mid+1; else r=mid-1; } ans+=cnt; } printf("%d",ans); }
相关文章推荐
- [BZOJ2084][Poi2010]Antisymmetry(hash+二分||manacher)
- 【二分答案】【字符串哈希】bzoj2084 [Poi2010]Antisymmetry
- [BZOJ2084][Poi2010]Antisymmetry 二分+hash
- bzoj 2084: [Poi2010]Antisymmetry (hash+二分)
- BZOJ 2084: [Poi2010]Antisymmetry
- BZOJ2084[Poi2010] Antisymmetry
- 【bzoj2084】[Poi2010]Antisymmetry
- 2084: [Poi2010]Antisymmetry hash+二分
- 【bzoj2084】[Poi2010]Antisymmetry
- bzoj2084 [Poi2010]Antisymmetry(manacher)
- BZOJ 2084 [Poi2010]Antisymmetry(manacher)
- Bzoj2084:[Poi2010]Antisymmetry:manachar算法
- 【bzoj2084】 [Poi2010]Antisymmetry
- [BZOJ2084]Antisymmetry(二分+hash)
- BZOJ 2084 Poi2010 Antisymmetry Manacher
- 【BZOJ 2084 [Poi2010]Antisymmetry 回文树
- BZOJ 2084: [Poi2010]Antisymmetry 题解
- 【BZOJ2083】[Poi2010]Intelligence test 二分
- BZOJ.2095.[POI2010]Bridges(最大流ISAP 二分 欧拉回路)
- 【BZOJ】2084: [Poi2010]Antisymmetry