~~~题面~~~

题解:

通过观察可以发现,其实题目就是要求长度相等的字符串中有且只有1位字符不同的 ”字符串对“ 有多少。

因为数据范围不大, 所以考虑一种暴力至极的方法。

我们枚举是哪一位不同,然后通过hash验证,同时为了加速,我们先求出每一个字符串的前缀hash数组和后缀hash数组,

如果是枚举到第j位不同,我们就合并前缀hash[j-1]和后缀hash[j+1],然后判断是否相等即可。

因为是求点对,因此还要考虑组合数,所以我们判断的时候顺便求出组合数即可

 // luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
#define R register int
#define LL unsigned long long
#define AC 30010
#define ac 250
int n, m, k, ans;
LL H[AC][ac], G[AC][ac], tmp[AC];
char s[AC]; void cal(int x)//处理出2个整串的hash数组,然后再去除枚举的j并合并
{
for(R i = ; i <= m; i++) H[x][i] = H[x][i - ] * + s[i];
for(R i = m; i; i--) G[x][i] = G[x][i + ] * + s[i];
} void pre()
{
scanf("%d%d%d", &n, &m, &k);
for(R i = ; i <= n; i++)
{
scanf("%s", s + );
cal(i);
}
} void work()
{
int t;
for(R j = ; j <= m; j++)//枚举删掉哪位
{
for(R i = ; i <= n; i++)//获取每个串的hash值
tmp[i] = H[i][j-] * + G[i][j + ] * ;
sort(tmp + , tmp + n + );
t = ;
for(R i = ; i <= n; i++)//看有多少相同串,顺便统计组合数
if(tmp[i] == tmp[i - ]) ans += t, ++t;
else t = ;//不然就重置,如果有2个相同,显然不能只计一个,所以初始值为1 }
printf("%d\n", ans);
} int main()
{
// freopen("in.in", "r", stdin);
pre();
work();
// fclose(stdin);
return ;
}

[CTSC2014]企鹅QQ hash的更多相关文章

  1. BZOJ 3555: [Ctsc2014]企鹅QQ hash

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

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

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

  3. luoguP4503 [CTSC2014]企鹅QQ hash

    既然只有一位的不同,那么我们可以枚举这一位.... 我们只需要快速地计算去掉某一位的$hash$值.... 由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只 ...

  4. 字符串Hash || BZOJ 3555: [Ctsc2014]企鹅QQ || P4503 [CTSC2014]企鹅QQ

    题面:[CTSC2014]企鹅QQ 题解:无 代码: #include<iostream> #include<cstring> #include<cstdio> # ...

  5. [bzoj3555]企鹅QQ(hash)

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1645  Solved: 616[Submit][Statu ...

  6. bzoj3555: [Ctsc2014]企鹅QQ

    将字符串hash.不难写.然而1.注意用longlong2.数组大小注意...3.似乎别人都用的unsigned long long ?. #include<cstdio> #includ ...

  7. 【BZOJ3555】 [Ctsc2014]企鹅QQ

    BZOJ3555 [Ctsc2014]企鹅QQ Solution 只需要前缀Hash,然后考虑每一段的贡献就好了!!! 代码实现 #include<stdio.h> #include< ...

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

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

  9. bzoj——3555: [Ctsc2014]企鹅QQ

    3555: [Ctsc2014]企鹅QQ Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2617  Solved: 921[Submit][Statu ...

随机推荐

  1. quartz 核心概念

    一.quartz 核心概念 1.scheduler是一个计划调度器容器,容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就 ...

  2. Prism MEF example

    Related Attributes These attributes are under namespace System.ComponentModel.Composition Import The ...

  3. Android 简介

    一 Android起源 android: 机器人 android是google公司开发的基于Linux2.6的免费开源操作系统 2005 Google收购 Android Inc. 开始 Dalvik ...

  4. jstat命令

    jstat命令使用 jstat命令可以查看堆内存各部分的使用量,以及加载类的数量.命令的格式如下: jstat [-命令选项] [vmid] [间隔时间/毫秒] [查询次数] 注意:使用的jdk版本是 ...

  5. some Commands OF CONSOLE

    不可避免地使用console,一旦与电脑打交道:入口就是help,而很多行就直接过掉了,却不能看到需要的地方,在那里停下来,实际是需要使用more  less grep等 在windows中,使用di ...

  6. Ubuntu—查看进程并关闭进程

    环境:Ubuntu终端 命令:ps -aux 功能:查看进程信息 命令:kill 进程号(PID) 功能:杀死进程

  7. CVPR2018 关于视频目标跟踪(Object Tracking)的论文简要分析与总结

    本文转自:https://blog.csdn.net/weixin_40645129/article/details/81173088 CVPR2018已公布关于视频目标跟踪的论文简要分析与总结 一, ...

  8. FFM

    转载自http://blog.csdn.net/jediael_lu/ https://blog.csdn.net/jediael_lu/article/details/77772565 点击率预估算 ...

  9. Linux系统inotify工具安装配置

    inotify主要功能 Inotify 是一个 Linux特性,它监控文件系统操作,比如读取.写入和创建.Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多.学习如何将 ...

  10. JQuery常用函数方法全集

    Attribute: $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img").attr({src:"test ...