Time:2016.08.17
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
夏令营时做的题,一直没发题解
比较简单的思路是枚举每一位,然后看去掉这一位后有多少相同的串
关键是怎么快速比较与计算相同的串
比较容易的方法就是hash
hash值可以快速比较大小,而且通过对hash值O(nlogn)O(nlogn)的排序后可以O(n)O(n)扫出相同的串
num[i][j]表示字符j在一个串中处于i位置时的hash值
hash[i]表示串i的hash值
枚举每一位j时,此时串i的hash值就是hash[i]-num[i][s[j]]
排序比较一下就可以了
复杂度O(Lnlogn)O(Lnlogn)L是字符串长度
注意:
hash的方法是关键
这里直接使用131+自然溢出就好了
如果用什么取模大质数……会TLE or WA
当时搞的快疯了……
代码:

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ll ans;
int n,len,S;
ull hash[30002],num[202][65],p[202],tmp[30002];
char s[30002][202];
int cal(char c)
{if (c>='0'&&c<='9') return c-47;else if (c>='A'&&c<='Z') return c-54;else if (c>='a'&&c<='z') return c-60;else if (c=='@') return 63;else if (c=='_') return 64;return 0;
}
main()
{scanf("%d%d%d",&n,&len,&S);p[0]=1;for (int i=1;i<=len;i++) p[i]=p[i-1]*67*131;for (int i=1;i<=len;i++)for (int j=1;j<=64;j++)num[i][j]=p[i-1]*j*131;for (int i=1;i<=n;i++){getchar();for (int j=1;j<=len;j++)s[i][j]=getchar(),hash[i]=hash[i]+num[j][cal(s[i][j])];}for (int i=1;i<=len;i++){for (int j=1;j<=n;j++) tmp[j]=hash[j]-num[i][cal(s[j][i])];sort(tmp+1,tmp+n+1);int sum=1;for (int j=1;j<=n;j++)if (tmp[j]!=tmp[j+1]) ans+=(ll)sum*(sum-1)/2,sum=1;else sum++;}printf("%lld",ans);
}

【BZOJ3555】企鹅QQ,第一次正确的使用哈希A题相关推荐

  1. bzoj3555 企鹅QQ

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

  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. QQ输入正确密码却验证错误的解决办法:)

    http://www.newsuzhou.cn/ 2007-5-4 8:20:48 <script type="text/javascript">put(appComm ...

  6. 苹果cms第三方登录QQ互联正确回调设置方法

    QQ互联进行注册认证:https://connect.qq.com 登陆qq后点击头像申请开发者完善资料后提交审核. 域名填写你的网站域名 回调地址正确填写:http://域名/index.php/u ...

  7. BZOJ3555: [Ctsc2014]企鹅QQ

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

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

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

  9. 【CTSC2014】【BZOJ3555】企鹅QQ

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

最新文章

  1. 给python点颜色青少年学编程_早晨送给自己的句子,句句经典励志!
  2. yolov3模型识别不出训练图片_YOLOv3训练自己的模型
  3. golang中的strings.Replace
  4. 汇编:div 除法指令
  5. word 另存为xml后,读取xml的图片数据
  6. iptables nat实验_【零基础学云计算】LVS负载均衡群集之NAT模式搭建 (实践篇)...
  7. oracle的redolog停止,Oracle Redo Log日志故障处理一则
  8. 《Web Hacking 101》中的链接整理
  9. unity手机 通过php连接mysql_如何从Unity连接到数据库
  10. Xshell官网免费版
  11. 基于Python的DBC转Excel脚本
  12. HBuilderX App开发环境搭建
  13. 微分方程Gear方法MATLAB,matlab求解常微分方程(组)
  14. python多个判断条件_python if not in 多条件判断代码
  15. C4D倒角应用—样条挤压后如何正确倒角
  16. 1. 【Part3】 Contour Detection and Hierarchical Image Segmentation【轮廓检测图像分割】
  17. 黄健翔:观看欧冠决赛的建议!
  18. python分钟转换小时_Python程序将秒转换为小时,分钟和秒
  19. 【Linux】linux的网络配置(动态IP与静态IP)
  20. windows10无法连接到SENS,无限一分钟重启

热门文章

  1. Forrester:华为云容器是容器混合云最佳选择
  2. 【华为大咖分享】6.华为专家揭秘研发效能提升之道(后附PPT下载地址)
  3. oracle存储tar,Linux环境使用TAR命令快速部署安装Oracle
  4. php hibernate,Hibernate总结
  5. android studio moudel,Android Studio将module变为library
  6. Service startService方式的服务
  7. php 不能运行,PHP 环境不能正常运行
  8. matlab中LMI工具箱函数feasp的用法
  9. 一分钟教你在PyTorch跑模型的时候提取中间层查看图片
  10. java 批量插入clob_SpringBoot系列(16)线程池Executors并发编程之批量查询-插入数据