https://nanti.jisuanke.com/t/4

 #include <bits/stdc++.h>
using namespace std;
const int N=6e5+,base =;
typedef unsigned long long ull;
char str[N];
ull hl[N],hr[N],p[N]; int mark[N][]; ull get(ull h[],int l,int r)
{
return h[r]-h[l-]*p[r-l+];
} int k=;
long long getval(int l,int r)
{
if(l==r&&str[r]=='z'+)
return ;
long long sum=;
if(str[l]=='z'+)
l++;
for(int i=;i<=;++i)
{
int temp=(mark[r][i]-l+)/;
if(temp<)
continue;
sum+=temp;
}
return sum;
}
int main()
{ cin>>(str+);
int n=strlen(str+); for(int i=n*;i>;i-=)//重点i-=2 模拟kmp添加一个字符
{
str[i]=str[i/];
str[i-]='z'+;
//中间插一个不需要的数
} n=*n;
p[]=;
for(int i=;i<=n;++i)
{
for(int j=;j<=;++j)
{
mark[i][j]=mark[i-][j];
if(str[i]!='z'+)
mark[i][str[i]-'a'+]=i;
}
}
for(int i=,j=n;i<=n;i++,j--)
{
hl[i]=hl[i-]*base+str[i]-'a'+;//正序的哈希值 ->
hr[i]=hr[i-]*base+str[j]-'a'+;//逆序的哈希值 -> 这个是必要的
p[i]=p[i-]*base;
} long long ans=;
for(int i=;i<=n;i++)//枚举每一个字符作为中点
{
int l=,r=min(i-,n-i);
while(l<r)
{
int mid=l+r+>>;//半径长度 //if(get(hl,i-mid,i-1) != get(hl,i+1,i+mid) )
//判读的确是左右区间的判断 但是 值却都是->方向的
//所以这个就是必须要有逆序的原因 if(get(hl,i-mid,i-) !=get(hr,n-(i+mid)+,n-(i+)+))
{
//如果不符合 肯定是缩小半径
r=mid-;
}
else l=mid;
}
ans+=getval(i-l,i);
}
printf("%lld\n",ans);
return ;
}

1389

解:

字符串hash二分跑回文串。

G.Colorful String(The Preliminary Contest for ICPC Asia Xuzhou 2019)的更多相关文章

  1. E.XKC's basketball team(The Preliminary Contest for ICPC Asia Xuzhou 2019)

    https://nanti.jisuanke.com/t/41387 解: 离散化+线段树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); ...

  2. A.Who is better?(The Preliminary Contest for ICPC Asia Xuzhou 2019)

    https://nanti.jisuanke.com/t/41383 解: 斐波那契博弈+中国剩余定理. #include <bits/stdc++.h> using namespace ...

  3. B.super_log(The Preliminary Contest for ICPC Asia Nanjing 2019)

    同:https://www.cnblogs.com/--HPY-7m/p/11444923.html #define IOS ios_base::sync_with_stdio(0); cin.tie ...

  4. F. Greedy Sequence(主席树区间k的后继)(The Preliminary Contest for ICPC Asia Nanjing 2019)

    题意: 查找区间k的后继. 思路: 直接主席树. #define IOS ios_base::sync_with_stdio(0); cin.tie(0); #include <cstdio&g ...

  5. H.Holy Grail ( floyd )(The Preliminary Contest for ICPC Asia Nanjing 2019)

    题意: 给出一个有向图,再给出6条原来不存在的路径,让你在这6条路径上添加一个最小的数,使图不存在负环. 思路: 直接6遍 floyd 输出就行了. #include <bits/stdc++. ...

  6. The Preliminary Contest for ICPC Asia Xuzhou 2019

    A:Who is better? 题目链接:https://nanti.jisuanke.com/t/41383 题意: 类似于有N个石子,先手第一次不能拿完,每次后手只能拿 1 到 前一次拿的数量* ...

  7. The Preliminary Contest for ICPC Asia Xuzhou 2019 G Colorful String(回文自动机+dfs)

    这题建立一棵回文树,然后用dfs搜索答案,但是有一点需要注意,就是打vis的标记时,如果标记为1,那么在好几个节点都对同一个字符i打过标记,此时的搜索从字符i点回溯,回到它的父亲节点,搜索其它的字符, ...

  8. The Preliminary Contest for ICPC Asia Xuzhou 2019 G. Colorful String 回文树

    签到提: 题意:求出每一个回文串的贡献 (贡献的计算就是回文串不同字符的个数) 题解: 用回文树直接暴力即可 回文树开一个数组cost[ ][26] 和val[ ] 数组: val[i]表示回文树上节 ...

  9. The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team(排序+二分)

    这题其实就是瞎搞,稍微想一想改一改就能过. 排序按值的大小排序,之后从后向前更新node节点的loc值,如果后一个节点的loc大于(不会等于)前一个节点的loc,就把前一个节点的loc值设置为后面的l ...

随机推荐

  1. 转:JSON Assertion 适用于json格式的响应断言

    当响应结果是json格式时,用JSON Assertion更方便判断. 1 在请求上右键添加json断言 2  编辑json Assertion 判断方式: 如果响应结果不是json格式的,fail ...

  2. redis redis-cli

    默认无权限控制: 远程服务连接: $ redis-cli -h 127.0.0.1 -p 6379 windows下 :redis-cli.exe -h 127.0.0.1 -p 6379 redis ...

  3. Linux-ubuntu英文版输入法不能切换中文输入法问题解决办法

    1:System Settings中点击Language Support​ 2. ​ 3. ​ 4. ​ 5. ​ 6. ​ 7.注意不要勾选Only Show Current Language ​

  4. 【零基础】快速入门爬虫框架HtmlUnit

    迅速的HtmlUnit htmlunit是一款开源的web页面分析工具,理论上来说htmlunit应用于网页的自动化测试,但是相对来说更多人使用它来进行小型爬虫的快速开发.使用htmlunit进行爬虫 ...

  5. 华为鸿蒙OS能取代安卓吗?

    先回答问题,不能,起码几年之内不存在这种可能.8月9日华为的开发者大会上,余承东说:鸿蒙是一款基于微内核的全场景分布式OS.鸿蒙OS的设计初衷是为满足全场景智慧体验的高标准的连接要求,为此华为提出了4 ...

  6. 微服务中的CAP定律

    说到微服务,先给大家提一下CAP分布式应用知识吧,无论你微服务使用的是阿里云开源的Dubbo还是基于Springboot的一整套实现微服务的Springcloud都必须遵循CAP定理不然你所实现的分布 ...

  7. docker安装和基本命令

    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口. ...

  8. C#WinForm程序显示控制台窗口Console

    启动一个WINFORM项目,使用一些API函数将控制台显示出来: AllocConsole 和 FreeConsole. 本程序只在DEBUG模式下显示控制台 [DllImport("ker ...

  9. mysql8修改密码问题

    查看初始密码: grep "temporary password" /var/log/mysqld.log 查看validate_password变量 SHOW VARIABLES ...

  10. Android 单元测试学习计划

    网上查了一下Android单元测试相关的知识点,总结了一个学习步骤: 1. 什么是单元测试2. 单元测试正反面: 2.1. 重要性 2.2. 缺陷 2.3. 策略3. 单元测试的基础知识: 3.1. ...