2084: [Poi2010]Antisymmetry

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 812  Solved: 503
[Submit][Status][Discuss]

Description

对于一个01字符串,如果将这个字符串0和1取反后,再将整个串反过来和原串一样,就称作“反对称”字符串。比如00001111和010101就是反对称的,1001就不是。
现在给出一个长度为N的01字符串,求它有多少个子串是反对称的。

Input

第一行一个正整数N (N <= 500,000)。第二行一个长度为N的01字符串。

Output

一个正整数,表示反对称子串的个数。

Sample Input

8
11001011

Sample Output

7

hint
7个反对称子串分别是:01(出现两次), 10(出现两次), 0101, 1100和001011

HINT

 

Source

鸣谢 JZP

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define mod 100000007LL
using namespace std;
int n;
long long bit[];
long long b[],a[];
char s[];
int ans;
bool check(int st,int mid) {
if(st+mid->n) return ;
if(st-mid<) return ;
long long x1=((b[st+mid-]-b[st-]*bit[mid])%mod+mod)%mod;
long long x2=((a[st-mid]-a[st]*bit[mid])%mod+mod)%mod;
return x1==x2;
}
int main() {
scanf("%d",&n);
bit[]=;
for(int i=;i<=n;i++) {bit[i]=bit[i-]*%mod;}
scanf("%s",s+);
for(int i=;i<=n;i++) {
b[i]=b[i-]*+s[i]-''+;b[i]%=mod;
}
for(int i=n;i>=;i--) {
a[i]=a[i+]*+(((s[i]-'')^)+);a[i]%=mod;
}
for(int i=;i<=n;i++) {
int l=,r=n;
while(l<=r) {
int mid=(l+r)>>;
if(check(i,mid)) l=mid+;
else r=mid-;
}
ans+=(l-);
}
printf("%d",ans);
}

最新文章

  1. 1-Spark高级数据分析-第一章 大数据分析
  2. ctrip
  3. Kibana+X-Pack
  4. 让你的WPF程序使用多线程——BackgroundWorker
  5. Oracle DB 管理数据库的空间
  6. BM25相关度打分公式
  7. c#删除转义字符的方法,删除\0后所有字符串(菜鸟级别)
  8. 前端--关于CSS盒模型
  9. 多线程实际运用&lt;第七篇&gt;
  10. NSDate-日期类&amp;nbsp;OC——第七天(1)
  11. Bootstarp 使用布局
  12. 33.Odoo产品分析 (四) – 工具板块(4) – 问题追踪及群发邮件营销(1)
  13. typescript和coffeescript简介
  14. drf7 分页组件
  15. Jquery闪烁提示特效
  16. kettle学习笔记——插件的安装与使用
  17. 洛谷P4768 [NOI2018]归程(可持久化并查集,最短路)
  18. 前端学习 -- Html&amp;Css -- 框架集
  19. 2015-09-16 html课程总结1
  20. 利用include动作实现参数传递

热门文章

  1. Xcode 代码提示功能失效
  2. 《Cracking the Coding Interview》——第2章:链表——题目4
  3. PC Server远程管理卡用户管理脚本实现
  4. Entity Framework(一)
  5. 孤荷凌寒自学python第三十三天python的文件操作初识
  6. [转]Android的网络与通信
  7. iis如何处理并发请求
  8. 后端model传入前端JSP页面中的值判断后再取值
  9. 【bzoj3289】Mato的文件管理 离散化+莫队算法+树状数组
  10. hdu 1534 Schedule Problem (差分约束)