【POI 2010】反对称 Antisymmetry

题目:

对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称」字符串。比如 $00001111$ 和 $010101$ 就是反对称的,而 $1001$ 就不是。
现在给出一个长度为 $n$ 的 $0/1$ 字符串,求它有多少个子串是反对称的,注意这里相同的子串出现在不同的位置会被重复计算。

$n\le 5\times 10^5$

分析:

①显然,反对称字符串的长度一定是偶数。

因为若不是偶数,中间的那个数取反永远不会等于自己。

②若有串$S[x-l+1,\;x+l]$是反对称字符串,那么$\forall k \le l,\;S[x-k+1,\;x+k]$也是反对称字符串。

所以,我们可以直接二分$l$,然后使用$\rm Hash$判断字符串是否相等即可。

代码细节较多,我还没写出来。

原文地址:https://www.cnblogs.com/zhylj/p/9536516.html

时间: 2024-10-02 23:56:25

【POI 2010】反对称 Antisymmetry的相关文章

【POI 2010】 Antisymmetry

[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2084 [算法] manacher [代码] #include<bits/stdc++.h> using namespace std; #define MAXN 500010 int n; char s[MAXN]; inline void Manacher() { int i,len,mx = 0,pos = 0; long long ans = 0; static char t

反对称 Antisymmetry

https://loj.ac/problem/2452 题目描述 反对称串定义为进行0.1取反后再反过来和原串相同的字符串,给出一个字符串,求它的多少个子串是反对称串. 思路 首先我们从反对称串的定义入手,我们考虑如果一个串S为反对称串,显然它的长度是偶数,那么它也就是以它的对称轴为分割后将其前一部分反转后对称的字符串.因此,转化定义后我们的字符串具有单调性,即若一个字符串为反对称串,那么我们删除首尾后它仍是反对称串.所以我们可以暴力枚举每一个点为对称轴,二分查找其为反对称串的位置,对答案+找到

解题:POI 2010 Beads

题面 正反各做一遍哈希来判断,然后在两个哈希值里取一个$max/min$做哈希值,然后每次把子串们的哈希插进$set$里,最后统计集合大小,就可以优秀地在$O(nlog^2$ $n)$中出解了 然后我觉得这样太没有理想了,就写了一个挂链哈希表,结果跑的贼慢... 我挂链时的区分方法是换模数再模出一个新值,然后这样做的时候注意要和哈希表的基数和模数区分开 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm>

【题解】Luogu P3509 [POI 2010] ZAB-Frog 倍增dp

单调队列处理第k远的点 倍增跳点 滚(动数组)一维空间就能开下了 注意$m≤10^{18}$的读入 code 1 #include <bits/stdc++.h> 2 using namespace std; 3 namespace gengyf{ 4 #define ll long long 5 const int maxn=1e6+10; 6 inline ll read(){ 7 ll x=0,f=1; 8 char c=getchar(); 9 while(c<'0'||c>

[家里蹲大学数学杂志]第066期南开大学2008年高等代数考研试题参考解答

1计算题 ($5\times 12'=60'$). (1)设 ${\bf A}\in \bbR^{n\times n}$ 适合 (a)$a_{ii}>0$, $i=1,2,\cdots,n$; (b)$a_{ij}<0$, $i\neq j$; (c)$\dps{\sum_{i=1}^n a_{ik}=0}$, $k=1,2,\cdots,n$. 试求 $\rank({\bf A})$. 解答: 写出 $$\bex {\bf A}&=&\sex{\ba{cccc} a_{11}

[转]分块

转自:https://www.cnblogs.com/Sdchr/p/7927411.html 分块 设阈值 T ,把数据划分为两类,某一类的数据具有某种优势,另外一类的数据又具有另外一种优势,就可以结合利用两种优势,达到更优秀的复杂度.序列分块1. 「TH 2517」数颜色 单点修改,区间不同数个数,强制在线.2. 「SPOJ UNTITLE1」 n <= 5e5 ,区间增加等差数列,区间最值. 区间修改.区间查询是一类经典问题,数据结构的做法通常是划分为若干个子区间,若子区间的信息能够合并,

java的poi技术读取Excel[2003-2007,2010]

这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本, 即excel的后缀名为:xls和xlsx. 读取excel和MySQL相关: java的poi技术读取Excel数据到MySQL 你也可以在 : java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术 :java的jxl技术导入Excel  下面是本文的项目结构: 项目中所需要的jar文件: 所用的Excel数据(2003-2007,2010都是一

转帖 java使用poi.3.10读取excel 2010

package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss

java的poi技术读,写Excel[2003-2007,2010]

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流