传送门

题目分析

题意即求有多少对字符串只相差一个字符,枚举删除每个字符后的哈希, 看有多少相等即可。

比如有如下字符串:$Sd123$,其中S部分的哈希值为H,删除的是d,则原字符串的哈希值为$$(((H * T + d) * T + 1) * T + 2) * T + 3 = H * T^4 + d * T^3 + 1 * T^2 + 2 * T + 3$$

删除过后就为$$((H * T + 1) * T + 2) * T +3 = H * T^3 + 1 * T^2 + 2 * T + 3$$

也就是将1以前的哈希值全部剪去然后加上d之前的哈希值乘以$T^{len - delpos}$。

code

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;const int N = 3e4 + 5, L = 205, Mod = 23333;
typedef unsigned long long ull;
const ull H = 149;
ull hash[N][L], poww[L], go[N << 2], t[N];
int ecnt, adj[Mod + 5], nxt[N << 2];
int n, l, m, cnt;
char s[N][L];inline ull del(int k, int d){return hash[k][l] - hash[k][d] * poww[l - d] + hash[k][d - 1] * poww[l - d];
}int main(){scanf("%d%d%d", &n, &l, &m);for(int i = 1; i <= n; i++)scanf("%s", s[i] + 1);for(int i = 1; i <= n; i++)for(int j = 1; j <= l; j++)hash[i][j] = hash[i][j - 1] * H + s[i][j];poww[0] = 1;for(int i = 1; i <= L; i++) poww[i] = poww[i - 1] * H;for(int j = 1; j <= l; j++){for(int i = 1; i <= n; i++)t[i] = del(i, j);sort(t + 1,t + n + 1);int sum = 1;for(int i = 2; i <= n; i++){if(t[i] == t[i - 1]){cnt += sum;sum++;}else sum = 1;}}printf("%d", cnt);return 0;
}

转载于:https://www.cnblogs.com/CzYoL/p/7434515.html

【bzoj3555】[Ctsc2014]企鹅QQ 简单哈希相关推荐

  1. BZOJ3555: [Ctsc2014]企鹅QQ

    [传送门:BZOJ3555] 简要题意: 给出n个字符串长度为m,给出字符串的字符种数,求出相似的字符串个数 相似字符串的定义为:相同位置上两个字符串有且只有一个字符不相同时,两个字符串相似 题解: ...

  2. 【BZOJ3555】[Ctsc2014]企鹅QQ hash

    [BZOJ3555][Ctsc2014]企鹅QQ Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础, ...

  3. [Ctsc2014]企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MB [Submit][Status][Discuss] Description ...

  4. 洛谷 P4503 [CTSC2014]企鹅QQ 解题报告

    P4503 [CTSC2014]企鹅QQ 题目背景 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即 ...

  5. 【BZOJ3555】企鹅QQ,第一次正确的使用哈希A题

    Time:2016.08.17 Author:xiaoyimi 转载注明出处谢谢 传送门 思路: 夏令营时做的题,一直没发题解 比较简单的思路是枚举每一位,然后看去掉这一位后有多少相同的串 关键是怎么 ...

  6. 【bzoj3555】[Ctsc2014]企鹅QQ

    题目描述: PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能 ...

  7. 【CTSC2014】【BZOJ3555】企鹅QQ

    Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大 ...

  8. BZOJ 3555 [CTSC2014] 企鹅QQ Hash

    Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大 ...

  9. luoguP4503 [CTSC2014]企鹅QQ hash

    既然只有一位的不同,那么我们可以枚举这一位.... 我们只需要快速地计算去掉某一位的$hash$值.... 由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只 ...

最新文章

  1. Linux 下 PHP 5.2.x 连接 SQL Server 数据库 FreeTDS 配置笔记
  2. j2ee html5,HTML5+J2EE实现文件异步上传
  3. JavaScript事件循环探索
  4. 醒醒!Python已经支持中文变量名啦!
  5. 荣耀V40值得购买吗?玩游戏是一把好手!
  6. Spring和石英:多作业计划服务
  7. java和c++的区别大吗_小自考本科含金量高吗?小自考和大自考有什么区别?
  8. JMeter中使用“用户自定义变量”实现参数化
  9. visio网络拓扑图 下载_Visio2019软件下载及安装教程
  10. SQL Server 函数的使用(转换函数)
  11. 引用使用_引用公文标题时,“”与《》正确使用法则
  12. linux目录与文件,Linux目录与文件基本操作
  13. 一个离线的简单的 JSON 格式化编辑器
  14. opencv android模版匹配,基于opencv模板匹配的目标检测方法
  15. 产品经理的私房菜 - 腾讯产品模型 - 学习能力篇
  16. 华为OD机试 - 乱序整数序列两数之和绝对值最小
  17. linux grep,sed和awk常用操作
  18. 第六届高分子材料国际研讨会(PMS-BT 2019)
  19. JAVA_HOME指的是什么内容?
  20. 着色器Encoding floats to RGBA

热门文章

  1. PAT_B_1058_Java(20分)
  2. python语言是一门编程语言_python是一门怎样的编程语言?老男孩python入门
  3. html dot标签,html – CSS Dot符号命名约定
  4. 大话“用户注册激活,忘记密码”发送邮件功能
  5. [Golang] GoConvey测试框架使用指南
  6. 【Ubuntu-Tensorflow】GPU设置及显存资源分配
  7. opencv_python关于Qt的错误
  8. 范数在机器学习中的作用_设计在机器学习中的作用
  9. 农村民间借贷一分利息,有借条受法律保护吗?
  10. 《长调》 :寻找我们共同失去的天堂