既然只有一位的不同,那么我们可以枚举这一位....

我们只需要快速地计算去掉某一位的$hash$值....

由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只需要用$hash(S) - s[i] * seed^i$

由于字符串两两不相同,因此不存在两个串去掉$i$和去掉$j$仍会保持相似

这样子就可以做到不重的统计

复杂度$O(nL \log n)$

应该是可以用基排优化到$O(nL)$的...

#include <map>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;#define ll long long
#define ri register int
#define ull unsigned long long
#define rep(io, st, ed) for(ri io = st; io <= ed; io ++)
#define drep(io, ed, st) for(ri io = ed; io >= st; io --)
#define gc getchar
inline int read() {int p = 0; char c = gc();while(c > '9' || c < '0') c = gc();while(c >= '0' && c <= '9') p = p * 10 + c - '0', c = gc();return p;
}const int seed = 19260817;
const int sid = 30050;
const int pid = 205;int n, L, S;
char s[sid][pid];
ull wei[sid], val[sid], q[sid];int main() {n = read(); L = read(); S = read();wei[0] = 1;rep(i, 1, L) wei[i] = wei[i - 1] * seed;rep(i, 1, n) {scanf("%s", s[i] + 1);rep(j, 1, L) val[i] += s[i][j] * wei[j];}ll ans = 0;rep(i, 1, L) {rep(j, 1, n) q[j] = val[j] - s[j][i] * wei[i];sort(q + 1, q + n + 1);for(ri i = 1, j = 1; i <= n; i = j + 1) {j = i;while(q[j + 1] == q[i]) j ++;ans += (j - i + 1) * (j - i) / 2;}}printf("%lld\n", ans);return 0;
}

转载于:https://www.cnblogs.com/reverymoon/p/9951910.html

luoguP4503 [CTSC2014]企鹅QQ hash相关推荐

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

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

  2. BZOJ 3555 [CTSC2014] 企鹅QQ Hash

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

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

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

  4. [Ctsc2014]企鹅QQ

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

  5. 【bzoj3555】[Ctsc2014]企鹅QQ 简单哈希

    传送门 题目分析 题意即求有多少对字符串只相差一个字符,枚举删除每个字符后的哈希, 看有多少相等即可. 比如有如下字符串:$Sd123$,其中S部分的哈希值为H,删除的是d,则原字符串的哈希值为$$( ...

  6. 3555: [Ctsc2014]企鹅QQ

    先Hash一下. 删掉某一位,重新Hash,然后排序,扫一遍就好了. 感觉人品用光了,数组大小205打成25,WA了4次. #include<iostream> #include<c ...

  7. 【bzoj3555】[Ctsc2014]企鹅QQ

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

  8. BZOJ3555: [Ctsc2014]企鹅QQ

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

  9. bzoj3555 企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 1640  Solved: 613 Description ...

最新文章

  1. 使用 jQuery Deferred 和 Promise 创建响应式应用程序
  2. ARM体系结构及内核回顾总结(一)
  3. 推荐算法炼丹笔记:阿里序列化推荐算法MRIF
  4. ScrollView 分割屏幕效果
  5. 在 JQuery Mobile 中实现瀑布流图库布局
  6. 域乎曹胜虎:传统互联网“生病”了
  7. ggplot2横坐标标签旋转
  8. 免费数据集获取加速器|Graviti Open Datasets
  9. C++实现神经网络之一 | Net类的设计和神经网络的初始化
  10. i7 8750h支持linux,开启游戏本六核时代!酷睿i7-8750H处理器性能实测
  11. cf 1102F Elongated Matrix
  12. Google Web Accelerator
  13. 关于GPS定位高德开放平台SDK深度应用
  14. 推荐10 款 C++ 在线编译器
  15. 聚合支付的清算风险有哪些?
  16. python:初识自动化测试 playwright 库
  17. Spring 配置数据库动态密码
  18. 云通讯这局棋,声网、容联云怎么破?
  19. c语言next函数,详谈全排列next_permutation() 函数的用法(推荐)
  20. 【笔记】【JavaScript】JSchallenger-Arrays对象-练习笔记

热门文章

  1. Ubuntu下su:authentication failure的解决办法
  2. .bashrc: line 123: syntax error: unexpected end of file
  3. oracle的catalog,oracle学习笔记 RMAN catalog的创建和使用
  4. python需要音语基础_英语基础一般,如何才能学习C语言编程和Python
  5. python显示行数_jupyter notebook实现显示行号
  6. python爬取学校题库_如何使用 Python 爬虫爬取牛客网 Java 题库?
  7. php开发如何测试,用thinkphp开发微信,如何测试?
  8. 16、计算机图形学——基于AABB进行光线追踪的加速(下)
  9. yolov5检测完不显示框和标注
  10. rabbitmq实战:高效部署分布式消息队列_一文看懂消息队列中间件--AMQ及部署介绍...