【hash+二分】Antisymmetry
【题目链接】
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的更多相关文章
- 【BZOJ】1014: [JSOI2008]火星人prefix(splay+hash+二分+lcp)
		http://www.lydsy.com/JudgeOnline/problem.php?id=1014 题意:支持插入一个字符.修改一个字符,查询lcp.(总长度<=100000, 操作< ... 
- LOJ#6387 「THUPC2018」绿绿与串串 / String (Manacher || hash+二分)
		题目描述 绿绿和 Yazid 是好朋友.他们在一起做串串游戏. 我们定义翻转的操作:把一个串以最后一个字符作对称轴进行翻转复制.形式化地描述就是,如果他翻转的串为 RRR,那么他会将前 ∣R∣−1个字 ... 
- POJ 1743 Musical Theme (字符串HASH+二分)
		Musical Theme Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 15900 Accepted: 5494 De ... 
- Codeforces 1090J $kmp+hash+$二分
		题意 给出两个字符串\(s\)和\(t\),设\(S\)为\(s\)的任意一个非空前缀,\(T\)为\(t\)的任意一个非空前缀,问\(S+T\)有多少种不同的可能. Solution 看了一圈,感觉 ... 
- bzoj1014: [JSOI2008]火星人prefix(splay+hash+二分)
		题目大意:一个字符串三个操作:①求两个后缀的LCP②插入一个字符③修改一个字符. 前几天刚学了hash+二分求lcp,就看到这题. 原来splay还能这么用?!原来splay模板这么好写?我以前写的s ... 
- bnuoj 34990(后缀数组 或 hash+二分)
		后缀数组倍增算法超时,听说用3DC可以勉强过,不愿写了,直接用hash+二分求出log(n)的时间查询两个字符串之间的任意两个位置的最长前缀. 我自己在想hash的时候一直在考虑hash成数值时MOD ... 
- 【bzoj1014】[JSOI2008]火星人prefix  Splay+Hash+二分
		题目描述 火星人最近研究了一种操作:求一个字串两个后缀的公共前缀.比方说,有这样一个字符串:madamimadam,我们将这个字符串的各个字符予以标号:序号: 1 2 3 4 5 6 7 8 9 10 ... 
- 140. 后缀数组(hash + 二分 / 后缀数组)
		题目链接 : https://www.acwing.com/problem/content/description/142/ Hash + 二分 #include <bits/stdc++.h& ... 
- ZZULI 1876: 蛤玮的项链 Hash + 二分
		Time Limit: 6 Sec Memory Limit: 128 MBSubmit: 153 Solved: 11 SubmitStatusWeb Board Description 蛤玮向 ... 
随机推荐
- PHP 根据两个坐标计算距离 圆形围栏的计算
			可以应用于圆形电子围栏入 出围栏计算 圆形电子围栏的计算方式是: 根据圆心坐标和当前检查的坐标进行距离计算,如果距离长度超出围栏的半径,则判定为出围栏,反之是在围栏之内 <?php /** * ... 
- Vue 使用百度地图组件
			npm 安装 npm install vue-baidu-map --save组件官网地址 https://dafrok.github.io/vue-baidu-map/#/ 
- 部署Hadoop2.0高性能集群
			废话不多说直接实战,部署Hadoop高性能集群: 拓扑图: 一.实验前期环境准备: 1.三台主机配置hosts文件:(复制到另外两台主机上) [root@tiandong63 ~]# more /et ... 
- ARTS打卡计划第十六周
			Algorithms: https://leetcode-cn.com/problems/min-stack/submissions// Review: https://www.infoq.cn/ar ... 
- tensorflow训练中出现nan
			问题暂记: 之后看 https://blog.csdn.net/qq_23142123/article/details/80526931 https://www.zhihu.com/question/ ... 
- springboot内置分页技术
			1,在pom.xml中注入分页的配置 <dependency> <groupId>com.github.pagehelper</groupId> <artif ... 
- handler方法
			post(Runnable) postAtTime(Runnable,long) postDelayed(Runnable long) post类方法允许你排列一个Runnable对象到主线程队列中 ... 
- Android数据存储的方式
			1. 内部存储 * 路径: /data/data/包名/ * cache用于存储临时文件,系统内存不足时,清除缓存数据 * files用于存储重要的文件,要用户手动在应用程序列表清 ... 
- AutoMapUtility
			实体属性自动映射,支持对象间属性值复制和List复制 安装 Install-Package AutoMapUtility -Version 1.0.2 https://github.com/leopa ... 
- 深度学习之Seq_seq网络
			知识点 """ 机器翻译: 历史: 1.逐字翻译 2.基于统计学的机器翻译 3.循环网络和编码 翻译过程: 输入 -- > encoder -->向量 --& ... 
