洛谷 P4503 [CTSC2014]企鹅QQ 解题报告
P4503 [CTSC2014]企鹅QQ
题目背景
PenguinQQ是中国最大、最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志、群、即时通讯、相册、集市等丰富强大的互联网功能体验,满足用户对社交、资讯、娱乐、交易等多方面的需求。
题目描述
小Q是PenguinQQ网站的管理员,他最近在进行一项有趣的研究——哪些账户是同一个人注册的。经过长时间的分析,小Q发现同一个人注册的账户名称总是很相似的,例如Penguin1,Penguin2,Penguin3……于是小Q决定先对这种相似的情形进行统计。
小Q定义,若两个账户名称是相似的,当且仅当这两个字符串等长且恰好只有一位不同。例如“Penguin1”和“Penguin2”是相似的,但“Penguin1”和“2Penguin”不是相似的。而小Q想知道,在给定的n 个账户名称中,有多少对是相似的。
为了简化你的工作,小Q给你的N 个字符串长度均等于L ,且只包含大小写字母、数字、下划线以及‘@’共64种字符,而且不存在两个相同的账户名称。
输入输出格式
输入格式:
第一行包含三个正整数N ,L ,S 。其中N 表示账户名称数量,L 表示账户名称长度,S 用来表示字符集规模大小,它的值只可能为2或64。
若S 等于2,账户名称中只包含字符‘0’和‘1’共2种字符;
若S 等于64,账户名称中可能包含大小写字母、数字、下划线以及‘@’共64种字符。
随后N 行,每行一个长度为L 的字符串,用来描述一个账户名称。数据保证N 个字符串是两两不同的。
输出格式:
仅一行一个正整数,表示共有多少对相似的账户名称。
说明:
| 测试点编号 | N | L | S |
|---|---|---|---|
| 1 | 50 | 10 | 64 |
| 2 | 500 | 100 | 64 |
| 3 | 3000 | 100 | 2 |
| 4 | 3000 | 100 | 64 |
| 5 | 30000 | 50 | 2 |
| 6 | 30000 | 50 | 64 |
| 7 | 30000 | 200 | 2 |
| 8 | 30000 | 200 | 64 |
| 9 | 30000 | 200 | 2 |
| 10 | 30000 | 200 | 64 |
果然我还是太naive
思路:枚举哪一位不同,取左边和右边的hash值进行比较统计
hash值先预处理
复杂度:\(O(nlognL)\)
然而这个题大家都用的是自动溢出取模,我并不知道说明时候该用这个。之前等价表达式用被卡出shi来
Code:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
const int N=30010;
const ll mod=1e9+7;
const ll base=233;
pair <ll,ll> dx[N];
char c[N][203];
int n,l,s,ans;
ll f1[N][203],f2[N][203];
int main()
{
scanf("%d%d%d",&n,&l,&s);
for(int i=1;i<=n;i++)
scanf("%s",c[i]+1);
ll t=1;
for(int j=1;j<=l;j++)
{
for(int i=1;i<=n;i++)
f1[i][j]=(f1[i][j-1]+t*c[i][j])%mod;
t=(t*base)%mod;
}
t=1;
for(int j=l;j>=1;j--)
{
for(int i=1;i<=n;i++)
f2[i][j]=(f2[i][j+1]+t*c[i][j])%mod;
t=(t*base)%mod;
}
for(int i=1;i<=l;i++)
{
for(int j=1;j<=n;j++)
{
dx[j].first=f1[j][i-1];
dx[j].second=f2[j][i+1];
}
sort(dx+1,dx+1+n);
int cnt=0;
for(int j=1;j<=n;j++)
{
if(dx[j]==dx[j-1]) cnt++;
if(dx[j]!=dx[j-1])
{
ans+=(cnt-1)*cnt/2;
cnt=1;
}
}
ans+=(cnt-1)*cnt/2;
}
printf("%d\n",ans);
return 0;
}
2018.7.25
洛谷 P4503 [CTSC2014]企鹅QQ 解题报告的更多相关文章
- 洛谷$P4503\ [CTSC2014]$企鹅$QQ$ 哈希
正解:哈希 解题报告: 传送门$QwQ$ 直接$O(len)$枚举哪一位,然后把这一位删了重新拼接起来,存桶里查下就成 $over$? 主要的难点大概在卡哈希+卡常$QAQ$ #include< ...
- [洛谷P4503][CTSC2014]企鹅QQ
题目大意:给你$n(n\leqslant3\times10^4)$个长度为$l(l\leqslant200)$的字符串,要你求出有多少对字符串是相似的,相似的定义是两个字符串只在一位上不同. 题解:可 ...
- 洛谷 P4503 [CTSC2014]企鹅QQ
暴力枚举不同的一位即可.. 主要是常数问题 1.统计答案时用sort速度快于用tr1/unordered_map,后者又快于map (tr1/unordered_map完全达不到理论复杂度上的O(1) ...
- Luogu P4503 [CTSC2014]企鹅QQ(字符串哈希)
P4503 [CTSC2014]企鹅QQ 题面 题目背景 \(PenguinQQ\) 是中国最大.最具影响力的 \(SNS(Social Networking Services)\) 网站,以实名制为 ...
- 【题解】P4503 [CTSC2014]企鹅QQ(哈希)
[题解]P4503 [CTSC2014]企鹅QQ(哈希) 考虑这样一种做法,将每个字符串的删去某个字符的新字符串的哈希值存下来,然后最后\(sort\)一遍双指针统计每个值相同的数的个数\(x\),这 ...
- 字符串Hash || BZOJ 3555: [Ctsc2014]企鹅QQ || P4503 [CTSC2014]企鹅QQ
题面:[CTSC2014]企鹅QQ 题解:无 代码: #include<iostream> #include<cstring> #include<cstdio> # ...
- 洛谷_Cx的故事_解题报告_第四题70
1.并查集求最小生成树 Code: #include <stdio.h> #include <stdlib.h> struct node { long x,y,c; ...
- 洛谷 P2317 [HNOI2005]星际贸易 解题报告
P2317 [HNOI2005]星际贸易 题目描述 输入输出格式 输入格式: 输出格式: 如果可以找到这样的方案,那么输出文件output.txt中包含两个整数X和Y.X表示贸易额,Y表示净利润并且两 ...
- 洛谷 P3802 小魔女帕琪 解题报告
P3802 小魔女帕琪 题目背景 从前有一个聪明的小魔女帕琪,兴趣是狩猎吸血鬼. 帕琪能熟练使用七种属性(金.木.水.火.土.日.月)的魔法,除了能使用这么多种属性魔法外,她还能将两种以上属性组合,从 ...
随机推荐
- vue-cli的安装使用
通过 npm install vue 安装vue 后: 1.打开cmd 输入 npm install --global vue-cli 全局安装vue-cli脚手架 输入 vue -V 返回vue-c ...
- scrapy (一)
scrapy框架 scrapy 是一个爬虫框架,能够高效率,高层次的爬取页面的数据并进行处理. 在scrapy的英文文档中,有这样的一个流程图 scrapy 框架主要分为五大部分,spider, en ...
- POJ 3278 Catch That Cow (附有Runtime Error和Wrong Answer的常见原因)
题目链接:http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total S ...
- 前端之JavaScript(一)
一.JavaScript前世今生 它最初由Netscape的Brendan Eich设计.JavaScript是甲骨文公司的注册商标.Ecma国际以JavaScript为基础制定了ECMAScript ...
- 【python 3.6】使用itertools.product进行排列组合
#python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' import itertools colo ...
- webpack入门指南-step01
一.webpack是什么? web开发中常用到的静态资源主要有JavaScript.CSS.图片.Jade等文件,webpack中将静态资源文件称之为模块.webpack是一个模块打包工具(命令行工具 ...
- Android 6.0 中的 Wifi 连接
Android 6.0 中的 Wifi 连接 这几天在写一个软件,结果被其中的 wifi 连接问题困扰了 3 天. 先描述下需求: usb 接口接了一根 usb2serial,通过这个接口接收命令 当 ...
- "助成"招聘网站视频简介
我们小组为我们的作品录制了一个一分多钟的电梯介绍视频,这是视频连接,我上传到了优酷上:http://v.youku.com/v_show/id_XMzIzMTc1ODc2NA==.html?spm=a ...
- Ubuntu16.04下 protobuf3.4.0 的安装与卸载
感谢原文作者:https://blog.csdn.net/xiexievv/article/details/47396725 一. 安装 下载protobuf protobuf下载地址:https:/ ...
- IT小小鸟阅读笔记
人生就像是一艘漂泊的船,你努力滑行了就会找到成功的彼岸,否则就漂泊一生.在这个物欲横流的时代有太多的诱惑使我们静不下心来,但是我们应该时时刻刻警醒自己要做一些对自己成长有意义的事,程序员虽然幸苦但是作 ...