BZOJ_3555_[Ctsc2014]企鹅QQ_哈希
BZOJ_3555_[Ctsc2014]企鹅QQ_哈希
Description
PenguinQQ是中国最大、最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志、群、即时通讯、相册、集市等丰富强大的互联网功能体验,满足用户对社交、资讯、娱乐、交易等多方面的需求。
小Q是PenguinQQ网站的管理员,他最近在进行一项有趣的研究——哪些账户是同一个人注册的。经过长时间的分析,小Q发现同一个人注册的账户名称总是很相似的,例如Penguin1,Penguin2,Penguin3……于是小Q决定先对这种相似的情形进行统计。
小Q定义,若两个账户名称是相似的,当且仅当这两个字符串等长且恰好只有一位不同。例如“Penguin1”和“Penguin2”是相似的,但“Penguin1”和“2Penguin”不是相似的。而小Q想知道,在给定的 个账户名称中,有多少对是相似的。
为了简化你的工作,小Q给你的 个字符串长度均等于 ,且只包含大小写字母、数字、下划线以及‘@’共64种字符,而且不存在两个相同的账户名称。
Input
第一行包含三个正整数 , , 。其中 表示账户名称数量, 表示账户名称长度, 用来表示字符集规模大小,它的值只可能为2或64。
若 等于2,账户名称中只包含字符‘0’和‘1’共2种字符;
若 等于64,账户名称中可能包含大小写字母、数字、下划线以及‘@’共64种字符。
随后 行,每行一个长度为 的字符串,用来描述一个账户名称。数据保证 个字符串是两两不同的。
Output
仅一行一个正整数,表示共有多少对相似的账户名称。
Sample Input
Fax
fax
max
mac
Sample Output
HINT
4对相似的字符串分别为:Fax与fax,Fax与max,fax与max,max与mac。N<=30000,L<=200,S<=64
枚举不同字符的位置,然后求一下有多少个哈希值相同即可。
我的map疯狂T,然后改成哈希表就A了。
代码:
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <map>
using namespace std;
typedef unsigned long long ll;
#define N 30050
#define M 233
ll h[N][M],base=13131,mi[M],a[N];
int n,m,v[N],top;
char s[M];
int mod=1000003,c[1000050];
ll tab[1000050];
//map<ll,int>f;
void insert(ll x) {
int p=x%mod;
while(tab[p]&&tab[p]!=x) p=(p+1)%mod;
tab[p]=x; c[p]++;
}
void clear(ll x) {
int p=x%mod;
while(tab[p]&&tab[p]!=x) p=(p+1)%mod;
tab[p]=c[p]=0;
}
int ask(ll x) {
int p=x%mod;
while(tab[p]&&tab[p]!=x) p=(p+1)%mod;
return c[p];
}
int main() {
scanf("%d%d%*d",&n,&m);
int i,j;
mi[0]=1;
for(i=1;i<=m;i++) mi[i]=mi[i-1]*base;
for(i=1;i<=n;i++) {
scanf("%s",s+1);
for(j=1;j<=m;j++) {
h[i][j]=h[i][j-1]*base+s[j];
}
}
int ans=0;
for(i=1;i<=m;i++) {
//f.clear();
for(j=1;j<=n;j++) {
ll tmp=0;
a[j]=h[j][i-1]*mi[m-i]+h[j][m]-h[j][i]*mi[m-i];
/*if(f.count(a[j])) tmp=f[a[j]];
ans+=tmp;
f[a[j]]=tmp+1;*/
/*ans+=ask(a[j]);
insert(a[j]);*/
}
sort(a+1,a+n+1);
memset(v,0,sizeof(v));top=1;v[1]=1;
for(j=2;j<=n;j++) {
if(a[j]!=a[j-1]) top++;
v[top]++;
}
for(j=1;j<=top;j++) {
// clear(a[j]);
ans+=v[j]*(v[j]-1)/2;
}
}
printf("%d\n",ans);
}
BZOJ_3555_[Ctsc2014]企鹅QQ_哈希的更多相关文章
- 【题解】P4503 [CTSC2014]企鹅QQ(哈希)
[题解]P4503 [CTSC2014]企鹅QQ(哈希) 考虑这样一种做法,将每个字符串的删去某个字符的新字符串的哈希值存下来,然后最后\(sort\)一遍双指针统计每个值相同的数的个数\(x\),这 ...
- 洛谷$P4503\ [CTSC2014]$企鹅$QQ$ 哈希
正解:哈希 解题报告: 传送门$QwQ$ 直接$O(len)$枚举哪一位,然后把这一位删了重新拼接起来,存桶里查下就成 $over$? 主要的难点大概在卡哈希+卡常$QAQ$ #include< ...
- BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 2046 Solved: 749[Submit][Statu ...
- Luogu P4503 [CTSC2014]企鹅QQ(字符串哈希)
P4503 [CTSC2014]企鹅QQ 题面 题目背景 \(PenguinQQ\) 是中国最大.最具影响力的 \(SNS(Social Networking Services)\) 网站,以实名制为 ...
- 3555: [Ctsc2014]企鹅QQ
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 696 Solved: 294[Submit][Status ...
- [Ctsc2014]企鹅QQ
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description P ...
- bzoj3555: [Ctsc2014]企鹅QQ
将字符串hash.不难写.然而1.注意用longlong2.数组大小注意...3.似乎别人都用的unsigned long long ?. #include<cstdio> #includ ...
- BZOJ 3555: [Ctsc2014]企鹅QQ hash
3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...
- 字符串Hash || BZOJ 3555: [Ctsc2014]企鹅QQ || P4503 [CTSC2014]企鹅QQ
题面:[CTSC2014]企鹅QQ 题解:无 代码: #include<iostream> #include<cstring> #include<cstdio> # ...
随机推荐
- CRM客户关系管理系统(十一)
第十一章.学员报名流程开发 11.1.面包屑的制作 Boorstrap路径导航条 (1)table_obj_list.html页面面包屑 def table_obj_list 返回数据改成locals ...
- IT轮子系列(一)——DropDownList 的绑定,你秒懂了吗
前言 最近猛然惊觉(说是猛然,是因为自己工作那么多年,居然不自知.不反省),在开发中,自己碰到一些常用的功能代码块,还是习惯性的baidu,然后copy....这样的操作,不知自己重复了多少遍.现在回 ...
- Bash里面如何返回绝对路径
1.返回当前目录的绝对路径: basepath=$(cd `dirname $0`; pwd) echo $basepath 2.返回当前路径的上一级目录: xp_path=`dirname &quo ...
- CSS布局之--各种居中
居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...
- How To Install and Use Redis
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-Redis About Redis redis, dev ...
- Oracle 11g一步步安装详解
本文所需的安装包都存放在我网盘中,需要的私聊~ 一.安装VMware tools工具(非必须) 1.虚拟机上点击安装 因为我在虚拟机中做的,后面oracle 安装是图形化安装,需要屏幕大一点,不然有些 ...
- PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。
Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...
- java基本数据类型及其包装类
1.String类 String s1 = "hello world"; String s2 = "hello world"; String s3 = s1 + ...
- jQuery的学习笔记2
jQuery学习笔记 Day two Chapter two 选择器 类选择器 语法结构:$(“.classname”) javascript里面没有类选择器所以这个时候使用jQuery会更加的简便 ...
- Flask入门之触发器,事件,数据迁移
SQLAlchemy Core和SQLAlchemy ORM都具有各种各样的事件挂钩: 核心事件 - 这些在 Core Events中描述,并包括特定于连接池生命周期,SQL语句执行,事务生命周期以及 ...