正题

题目链接:https://www.luogu.com.cn/problem/P3449


题目大意

nnn个回文串,求有多少对回文串有序拼接可以形成一个新的回文串。


解题思路

结论:当两个回文串的最短循环节相同时两个拼接起来就是一个新的回文串。

这里感性证明一下:

  1. 若两个回文串的最短循环节相同,那么这个循环节一定也是个回文串,那么若干个相同的回文串拼接那么这也一定是个回文串,所以这是充分条件。
  2. 若两个回文串的最短循环节不同,那么头尾的第一个循环节之中必定有一个位置不同,所以这是必要条件。
  3. 感性理解

所以我们用字符串hashhashhash判断即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<map>
#define ll long long
#define ull unsigned long long
using namespace std;
const ll N=2e6+10,p=131;
ll n,l,ans;
ull pow[N],hash[N];
char s[N];
map<ull,ll> v;
ll get_hash(ll l,ll r){if(l>r) return 0;return hash[r]-hash[l-1]*pow[r-l+1];
}
int main()
{scanf("%lld",&n);pow[0]=1;for(ll j=1;j<=2e6;j++)pow[j]=pow[j-1]*p;for(ll i=1;i<=n;i++){scanf("%lld%s",&l,s+1);for(ll j=1;j<=l;j++)hash[j]=hash[j-1]*p+s[j]-'a';for(ll j=1;j<=l;j++)if((!(l%j))&&get_hash(1,l-j)==get_hash(j+1,l)){ll &z=v[hash[j]];ans+=2*z+1;z++;break;}}printf("%lld",ans);
}

P3449-[POI2006]PAL-Palindromes【结论题,字符串hash】相关推荐

  1. 【uoj#175】新年的网警 结论题+Hash

    题目描述 给出一张 $n$ 个点 $m$ 条边的无向连通图,每条边的边权为1.对于每个点 $i$ ,问是否存在另一个点 $j$ ,使得对于任意一个不为 $i$ 或 $j$ 的点 $k$ ,$i$ 到 ...

  2. CF869A The Artful Expedient 结论题+数论

    传送门 题目描述 Tommy和Karen在玩一个游戏. 他们各自准备了一个长度为n的数组,Tommy的数组称作a,Karen的数组称作b. 保证这2n个数互不相同,设这2n个数构成的集合为S. 现在他 ...

  3. hdu4821 字符串hash

    参考博客:点击打开链接 字符串hash典例. 这里用的是bkdrhash 法.也是最常用的冲突最少的一种.原理:把字符串和数值对应.这里用base=31(一般用质数), 先是扫一遍,处理处每个位子到结 ...

  4. hdu4821 字符串hash(有多少(M*L长的,M个不相同)子串))

    题意这英语..反正我是读不懂== 题意:给定一个串,有多少M*L的子串,其中子串的M个子串不相同= (注:某一位不相同即为不相同) 很明显要On的扫,但是似乎前一个与后一个没有关系?是的,前第x个(x ...

  5. CodeForces - 1498E Two Houses(交互+图论,结论题)

    题目链接:点击查看 题目大意:给出一个由 nnn 个点组成的竞赛图,现在要求出一组点对 (A,B)(A,B)(A,B),满足两个点可以互达,且入度的绝对值之差最大 题目分析:结论题,先放结论: 结论: ...

  6. 字符串Hash的原理与应用

    字符串Hash无论是在ACM竞赛中还是在工程中都有着广泛的应用,所以很有必要掌握好它的用法.主要分为两个部 分:Hash映射和冲突处理.而本文主要来详细讲解Hash映射的方法及应用,下篇文章将会介绍如 ...

  7. agc015F - Kenus the Ancient Greek(结论题)

    题意 题目链接 $Q$组询问,每次给出$[x, y]$,定义$f(x, y)$为计算$(x, y)$的最大公约数需要的步数,设$i \leqslant x, j \leqslant y$,求$max( ...

  8. 字符串hash(二)

    从上一届已经讲了字符串hash的方法,hash后怎么用也很重要 文章目录 一.查询子串的hash值 查询子串减去期中一个字符后的hash值 查询两个子串拼接的hash值 **hash的模板(自然溢出) ...

  9. 字符串hash(一)

    很久没遇到过hash的题了,今天来重新温故一下 文章目录 序言 常用的几个字符串hash方法: hash公式(自然溢出) 讲解 模板 单hash 讲解 模板 双hash 讲解 代码 总结 序言 你有没 ...

最新文章

  1. 【Linux 内核】进程管理 task_struct 结构体 ① ( task_struct 结构体引入 | task_struct 代码示例 )
  2. memset 结构体内指针_SideTable结构
  3. Retrofit学习笔记
  4. 使用QCustomPlot绘图的基础
  5. 【牛客网】迷途的牛牛 C++
  6. Skype For Asterisk 的安装及使用
  7. java 分布式任务队列_cerely-分布式异步任务队列
  8. nginx一个端口配置多域名服务
  9. 乔治亚理工学院计算机专业,乔治亚理工学院
  10. axure不能导出图片_axure怎么导出图片 如何将原型另存为图片?
  11. 机器学习实战 KNN实战
  12. QQ登陆界面Resource Hacker制作
  13. 苹果真伪查询_拆解报告:山寨版苹果AirPods Pro
  14. 如何用计算机画地形地貌图,地形图是如何绘制出来的
  15. 5款自动爬取数据的神器!
  16. 简述er图的作用_er图的作用是什么
  17. css3 实现星空动画 -- 星星闪烁 - 流星划过 - 月亮上升
  18. matlab二次函数拟合,【长见识】matlab的二次函数拟合
  19. 上网日志留存_日志留存系统
  20. 计算机标点符号课件,小学标点符号课件

热门文章

  1. python功能选择模块_python – 组合功能和功能模块
  2. js vue中得延时器_Vue.js实现时分秒倒计时
  3. 古登堡是垂直搜索引擎吗_网站排名,提高内容输出频率,就一定要对排名好吗?-SEO...
  4. mysql update返回_MySQL中,当update修改数据与原数据相同时会再次执行吗?
  5. leetcode654. 最大二叉树
  6. 计算机网络 哪个教材好,学习计算机网络哪本教材最好?
  7. C++ 泛型编程 实现红黑树RBTree
  8. C++ class实现孩子表示法
  9. [蓝桥杯]字符串对比-模拟
  10. [蓝桥杯2016初赛]搭积木-枚举,next_permutation