P3501 [POI2010]ANT-Antisymmetry

二分+hash

注意:答案超出int范围

------------

先拿一个反对称串来做栗子:010101

我们可以发现 0101(左边右边各削掉1个),01(左边右边各削掉2个)都是反对称串

多举几个例子,我们可以总结出一个性质:一个反对称串的所有同中心的子串都是反对称串

∴长为 n 的子串中的反对称子串数= n/2

------------
于是我们就可以设计算法了

每次枚举中心点,然后二分查找反对称串的最长长度。

对于反对称的问题,我们可以将主串正序逆序都计算一遍hash值。为了方便逆序的可以直接取反

每次判断时将子串取出,就可以达O(1)判断

复杂度O(nlogn)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef unsigned long long ull;
inline int min(int &a,int &b) {return a<b ?a:b;}
const int base=;
char q[]; int n;
ull h1[],h2[],fac[],ans; //自然溢出hash
int main(){
scanf("%d",&n); fac[]=;
scanf("%s",q);
for(int i=;i<=n;++i){
h1[i]=h1[i-]*base+(q[i-]=='');
fac[i]=fac[i-]*base; //通用取串方法:利用fac数组取出子串hash值,其中fac[i]=base^i
}
for(int i=n;i>=;--i) h2[i]=h2[i+]*base+(q[i-]==''); //逆序计算(直接取反)
for(int i=;i<n;++i){
int l=,r=min(i,n-i),mid;
while(l<r){ //二分查找长度的一半
   mid=l+((r-l)>>)+;
   ull p1=h1[i+mid]-h1[i-mid]*fac[mid*];
   ull p2=h2[i-mid+]-h2[i+mid+]*fac[mid*]; //取出子串
   if(p1==p2) l=mid;
   else r=mid-;
}
ans+=l;
}cout<<ans;
return ;
}

P3501 [POI2010]ANT-Antisymmetry的更多相关文章

  1. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  2. [洛谷P3501] [POI2010]ANT-Antisymmetry

    洛谷题目链接:[POI2010]ANT-Antisymmetry 题目描述 Byteasar studies certain strings of zeroes and ones. Let be su ...

  3. 后缀数组&manachar总结

    洛谷题单 后缀数组 前置芝士 后缀数组 1 后缀数组 2 后缀数组 3 例题略解 P2463 [SDOI2008]Sandy的卡片 板子题... 然而我还是不会. 大概做法就是先把所有的串差分后拼成一 ...

  4. BZOJ2084: [Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 187  Solved: 125[Submit] ...

  5. BZOJ 2084: [Poi2010]Antisymmetry [Manacher]

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 609  Solved: 387[Submit] ...

  6. 【BZOJ2084】[Poi2010]Antisymmetry(manarcher)

    [BZOJ2084][Poi2010]Antisymmetry(manarcher) 题面 BZOJ 洛谷 题解 一眼马拉车吧...明显就是在回文串的基础上随便改了改. 似乎还可以魔改回文树,然而我这 ...

  7. [BZOJ2084][Poi2010]Antisymmetry 二分+hash

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 812  Solved: 503[Submit] ...

  8. 【bzoj2084】[Poi2010]Antisymmetry

    2084: [Poi2010]Antisymmetry Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1205  Solved: 756[Submit ...

  9. 「POI2010」反对称 Antisymmetry (manacher算法)

    # 2452. 「POI2010」反对称 Antisymmetry [题目描述] 对于一个 $0/1$ 字符串,如果将这个字符串 $0$ 和 $1$ 取反后,再将整个串反过来和原串一样,就称作「反对称 ...

随机推荐

  1. 微信都在用的移动敏捷测试方法和工具|视频+PPT

    本文是腾讯优测总监雷彬在MPD2016 北京站上的演讲视频.他详细讲述了腾讯多年来在实践敏捷研发过程中测试的优化之路,为测试角色(包括测试工程师和开发自测)提供敏捷作业的思路.点击此处观看视频.时长5 ...

  2. .Net微服务架构之运行日志分析系统

    一.引言 .Net技术栈目前还没有像spring cloud相对完整一整微服务架构栈,随着业务发展系统架构演进,自行构建.Net技术体系的微服务架构,配套相关核心组件.因平台基于微服务架构方式研发,每 ...

  3. create view in view

    CREATE VIEW view_region2role AS ( SELECT region_set_id, region_set_name, GROUP_CONCAT(id) gc_id, GRO ...

  4. 构建更好的客户端 JavaScript 应用

    你可能注意到了,最近的一段时间越来越多的Web应用有变复杂的趋势,重心从服务端慢慢向着客户端转移. 这是个正常的趋势么?我不知道.支持和反对者的讨论就像是在讨论复活者和圣诞节哪一个更好一样; 很难说哪 ...

  5. TcMalloc的介绍以及Windows下安装使用

    本文由博主(SunboyL)原创,转载请注明出处:http://www.cnblogs.com/xsln/p/Introduction_TcMalloc.html 介绍: TcMalloc(Threa ...

  6. 多作者wordpress博客彻底屏蔽可视化编辑

    如果你的wordpress博客支持多作者,但是难免有些作者会加入过多的链接,怎么办呢?可以考虑屏蔽可视化编辑 在 functions.php 添加如下代码即可: add_filter('user_ca ...

  7. CentOS工作内容(四)主机禁ping

    CentOS工作内容(四)主机禁ping 用到的快捷键 tab 自动补齐(有不知道的吗) ctrl+a 移动到当前行的开头(a ahead) ctrl+u 删除(剪切)此处至开始所有内容 vim 末行 ...

  8. HTML5 脚本 语言代码 URL 符号实体 ASCII码 颜色

    1.HTML<noscript> 标签 <noscript> 标签提供无法使用脚本时的替代内容,比方在浏览器禁用脚本时,或浏览器不支持客户端脚本时. <noscript& ...

  9. vue学习之二ECMAScript6标准

    一.ECMAScript6标准简述 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目标,是使得 JavaScr ...

  10. [py]python多态-动态语言的鸭子类型

    弱类型?强类型?动态语言,静态语言 弱类型: 在程序运行过程中,类型可变 还有一种说法: 动态 variables must necessarily be defined before they ar ...