【题目链接】

https://loj.ac/problem/2452

【参考博客】

https://blog.csdn.net/xgc_woker/article/details/82904631

【题意】

在原串中找出多少组子串是反对称的,其中反对称的定义为:“该串取反 和 该串逆置是一样的”

【题解】

二分+hash,hash用两遍,记得要用二分判断最长的长度,如果最长的合法的,那么最长的半径长度就是该串为中心的方案数。

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ULL ;
const int N = 5e5+;
const ULL base = ;
ULL h1[N] , h2[N] , p[N] , ans ;
int n,s[N] ; /*
预处理
前缀hash h1
后缀hash h2
*/
void get_Hash(){
p[] = ;
for(int i=;i<=n;i++){
p[i] = p[i-] * base ;
h1[i] = h1[i-] * base + (ULL) s[i];
}
for(int i=n;i>=;i--){
h2[i] = h2[i+] * base + (ULL) (s[i]^);
}
}
/*
以i为判断的中心,其中[L,R] [x,y] 是两个半径
*/
bool check(int L,int R,int x,int y){
return h1[R] - h1[L-] * p[R-L+] == h2[x] - h2[y+] *p[y-x+] ;
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%1d",&s[i]);
get_Hash(); for(int i=;i<=n;i++){
/*
注意确定上下界
下界必须是L=0
上界是到右侧的最短距离或者到左侧的最短距离
*/
int L = , R = min(n-i,i) , Mid ;
while( L < R ){
Mid = L + R + >> ;
if( check(i-Mid+,i,i+,i+Mid) ){
L = Mid ;
}else {
R = Mid - ;
}
}
/*
题目:明确说到,“将这个字符串0和1取反后,再将整个串反过来和原串一样”
事例中“100”并不符合,因为取反是"011",逆置是"001"。
这一事例充分说明奇数串是不可能的。 二分以i为最长的半径,那么比i小的都是它符合题意的反对称的串
*/
ans += L ;
}
printf("%llu\n",ans);
return ;
}

【hash+二分】Antisymmetry的更多相关文章

  1. 【BZOJ】1014: [JSOI2008]火星人prefix(splay+hash+二分+lcp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1014 题意:支持插入一个字符.修改一个字符,查询lcp.(总长度<=100000, 操作< ...

  2. LOJ#6387 「THUPC2018」绿绿与串串 / String (Manacher || hash+二分)

    题目描述 绿绿和 Yazid 是好朋友.他们在一起做串串游戏. 我们定义翻转的操作:把一个串以最后一个字符作对称轴进行翻转复制.形式化地描述就是,如果他翻转的串为 RRR,那么他会将前 ∣R∣−1个字 ...

  3. POJ 1743 Musical Theme (字符串HASH+二分)

    Musical Theme Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15900   Accepted: 5494 De ...

  4. Codeforces 1090J $kmp+hash+$二分

    题意 给出两个字符串\(s\)和\(t\),设\(S\)为\(s\)的任意一个非空前缀,\(T\)为\(t\)的任意一个非空前缀,问\(S+T\)有多少种不同的可能. Solution 看了一圈,感觉 ...

  5. bzoj1014: [JSOI2008]火星人prefix(splay+hash+二分)

    题目大意:一个字符串三个操作:①求两个后缀的LCP②插入一个字符③修改一个字符. 前几天刚学了hash+二分求lcp,就看到这题. 原来splay还能这么用?!原来splay模板这么好写?我以前写的s ...

  6. bnuoj 34990(后缀数组 或 hash+二分)

    后缀数组倍增算法超时,听说用3DC可以勉强过,不愿写了,直接用hash+二分求出log(n)的时间查询两个字符串之间的任意两个位置的最长前缀. 我自己在想hash的时候一直在考虑hash成数值时MOD ...

  7. 【bzoj1014】[JSOI2008]火星人prefix Splay+Hash+二分

    题目描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 ...

  8. 140. 后缀数组(hash + 二分 / 后缀数组)

    题目链接 : https://www.acwing.com/problem/content/description/142/ Hash + 二分 #include <bits/stdc++.h& ...

  9. ZZULI 1876: 蛤玮的项链 Hash + 二分

    Time Limit: 6 Sec  Memory Limit: 128 MBSubmit: 153  Solved: 11 SubmitStatusWeb Board Description 蛤玮向 ...

随机推荐

  1. 【java设计模式】-00目录

    开篇 [java设计模式]-01设计模式简介 创建型模式: [java设计模式]-02工厂模式(Factory Pattern) [java设计模式]-03抽象工厂模式(Abstract Factor ...

  2. Dubbo API 笔记——Dubbo架构与使用

    转载于: https://blog.csdn.net/benhuo931115/article/details/78457149 架构演变 单一应用架构 所有功能部署在一个应用上,用于简化增删改查工作 ...

  3. pip安装命令集合

    先加速 使用清华大学镜像源(一定要用,会少很多坑) https://mirrors.tuna.tsinghua.edu.cn/help/alpine/ 超时加上参数  --default-timeou ...

  4. httpClinent工具类

    package com.juchn.gateway.common.utils; import java.io.BufferedReader; import java.io.IOException; i ...

  5. Hbuilder用自有证书打包 ios App上架AppStore流程

    最近在用Hbuilder做跨平台开发,经过一番研究终于在苹果商店上架成功了一款产品!这款产品就很简单,直接用hbuilder打包好,然后上传到商店即可.这里参照ios app提交应用商店 这篇文章结合 ...

  6. JDBC与ODBC

     ODBC(Open Database Connectivity)是一组对数据库访问的标准API,这些API通过SQL来完成大部分任务,而且它本身也支持SQL语言,支持用户发来的SQL.ODBC定义了 ...

  7. [MyBatis]完整MyBatis CRUD工程

    下载地址:https://files.cnblogs.com/files/xiandedanteng/Person191005.rar pom.xml:这个文件主要是引入依赖 <project ...

  8. http2.0多路复用

    http/1中的每个请求都会建立一个单独的连接,除了在每次建立连接过程中的三次握手之外,还存在TCP的慢启动导致的传输速度低.其实大部分的http请求传送的数据都很小,就导致每一次请求基本上都没有达到 ...

  9. Vue项目打包后背景图片路径错误

    vue项目打包之后背景图片出错的解决方案如下: 1,找到 config->index.js里面,如下修改 默认配置: env: require('./prod.env'), index: pat ...

  10. SDTP协议

    转载于 http://blog.csdn.net/fan_hai_ping/article/details/11797449 SDTP协议细则