BZOJ3555 [Ctsc2014]企鹅QQ 题解

题目大意:

有一些字符串,求其中两个等长且恰好只有一位不同的字符串的对数。

思路:

Hash大法好!正着倒着各来一遍(底数不同),之后枚举不同的那一位,前后两段拼起来之后为了有区分前面一部分再乘一个数。模数用unsigned long long自然溢出。

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 using namespace std;
 5 const int S1=1007,S2=10007;
 6 char s[210];
 7 unsigned long long l[30010][210],r[30010][210],a[30010];
 8
 9 int main()
10 {
11     int n,m,op,i,j,sum=0;
12     scanf("%d%d%d",&n,&m,&op);
13     for (i=1;i<=n;i++)
14     {
15         scanf("%s",s+1);
16         for (j=1;j<=m;j++) l[i][j]=l[i][j-1]*S1+s[j];
17         for (j=m;j>=1;j--) r[i][j]=r[i][j+1]*S2+s[j];
18     }
19     for (i=1;i<=m;i++)
20     {
21         for (j=1;j<=n;j++) a[j]=l[j][i-1]*233+r[j][i+1];
22         sort(a+1,a+n+1);
23         int ans=0;
24         for (j=2;j<=n;j++)
25             if (a[j]==a[j-1]) ans++,sum+=ans;
26             else ans=0;
27     }
28     printf("%d",sum);
29     return 0;
30 }
时间: 2024-10-23 10:27:57

BZOJ3555 [Ctsc2014]企鹅QQ 题解的相关文章

bzoj3555[Ctsc2014]企鹅QQ

bzoj3555[Ctsc2014]企鹅QQ 题意: 判定有多少对字符串只有一个字母不同.字符串个数≤30000,长度≤300. 题解: 求出第i个字符串前j个字符的哈希值hs[i][j],然后枚举去掉所有字符串的第几位,将去掉后的字符串的哈希值用hs数组直接算出,排序后检查有没有相同的计入答案. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define inc(i,j,k

BZOJ3555 [Ctsc2014]企鹅QQ 【hash】

题目 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用户对社交.资讯.娱乐.交易等多方面的需求. 小Q是PenguinQQ网站的管理员,他最近在进行一项有趣的研究--哪些账户是同一个人注册的.经过长时间的分析,小Q发现同一个人注册的账户名称总是很相似的,例如Penguin1,Penguin2,Penguin3--于是小Q决定先对这种相似的情形进行

bzoj3555: [Ctsc2014]企鹅QQ (Hash)

枚举每个分段的点,每次O(n)更新左边和右边的hash值 然后用双指针O(n)计算答案 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream> 5 #define ull unsigned long long 6 using namespace std; 7 struct HS{ 8 ull l,r; 9 }tmp[30010],hs[30010]

【字符串哈希】bzoj3555 [Ctsc2014]企鹅QQ

枚举每个位置,给每个串的前半部分一个哈希值,后半部分一个哈希值,若是它们均相等,则视为这两个串相似. 每次转移之后,排序一下就行了. O(L*n*log(n)). #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> using namespace std; typedef unsigned long long ull; struct HASH{ull l,r;}h

【题解】P4503 [CTSC2014]企鹅QQ(哈希)

[题解]P4503 [CTSC2014]企鹅QQ(哈希) 考虑这样一种做法,将每个字符串的删去某个字符的新字符串的哈希值存下来,然后最后\(sort\)一遍双指针统计每个值相同的数的个数\(x\),这个\(x\)对答案的贡献是\({x \choose 2}\) //@winlere #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace

3555: [Ctsc2014]企鹅QQ

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 696  Solved: 294[Submit][Status][Discuss] Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用户对社交.资讯.娱乐.交易等多方面的需求.小Q是Pen

BZOJ 3555: [Ctsc2014]企鹅QQ hash

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id=3555 Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用户对社交.资讯.娱乐.交易等多方面的需

bzoj——3555: [Ctsc2014]企鹅QQ

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2617  Solved: 921[Submit][Status][Discuss] Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用户对社交.资讯.娱乐.交易等多方面的需求.小Q是Pe

BZOJ 3555: [Ctsc2014]企鹅QQ [字符串哈希]【学习笔记】

3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2046  Solved: 749[Submit][Status][Discuss] Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验,满足用户对社交.资讯.娱乐.交易等多方面的需求.小Q是Pe