[BZOJ3555] [Ctsc2014]企鹅QQ(Hash)
可以枚举被删除的位置,然后用hash表判重,然而网上好多题解都是用 sort 判重的。
不知道为什么,int 总是过不了,换成 long long 或者是 unsigned long long 就过了 QAQ
——代码
#include <cstdio>
#include <cstring>
#define ULL unsigned long long
#define M(a, x) memset(a, x, sizeof(a)) const int p = , MAXN = ;
int n, m, k, cnt, ans;
int head[MAXN], num[MAXN], next[MAXN];
ULL bit[], sum[MAXN][], val[MAXN];
char s[MAXN][]; inline int insert(ULL x)
{
int i, a = x % p;
for(i = head[a]; i != -; i = next[i])
if(val[i] == x)
{
num[i]++;
return num[i] - ;
}
num[cnt]++;
val[cnt] = x;
next[cnt] = head[a];
head[a] = cnt++;
return ;
} int main()
{
int i, j;
scanf("%d %d %d", &n, &m, &k);
bit[] = ;
for(i = ; i <= m; i++) bit[i] = bit[i - ] * ;
for(i = ; i <= n; i++) scanf("%s", s[i] + );
for(i = ; i <= n; i++)
for(j = ; j <= m; j++)
sum[i][j] = sum[i][j - ] * + s[i][j];
for(i = ; i <= m; i++)
{
cnt = ;
M(head, -);
M(next, );
M(val, );
M(num, );
for(j = ; j <= n; j++)
ans += insert(sum[j][m] - sum[j][i] * bit[m - i] + sum[j][i - ] * bit[m - i + ]);
}
printf("%d\n", ans);
return ;
}
[BZOJ3555] [Ctsc2014]企鹅QQ(Hash)的更多相关文章
- 【BZOJ3555】[Ctsc2014]企鹅QQ hash
[BZOJ3555][Ctsc2014]企鹅QQ Description PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础, ...
- 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 ...
- bzoj3555: [Ctsc2014]企鹅QQ (Hash)
枚举每个分段的点,每次O(n)更新左边和右边的hash值 然后用双指针O(n)计算答案 #include<stdio.h> #include<string.h> #includ ...
- 【题解】 bzoj3555: [Ctsc2014]企鹅QQ (字符串Hash)
题面戳我 Solution 我们分析题意,他要求的是两个字符串只有一个字符不同,然后我们再看长度\(L \leq 200\),显然我们就可以把每一位删除后\(Hash\),然后判断相同个数即可 我一开 ...
- BZOJ3555 [Ctsc2014]企鹅QQ 【hash】
题目 PenguinQQ是中国最大.最具影响力的SNS(Social Networking Services)网站,以实名制为基础,为用户提供日志.群.即时通讯.相册.集市等丰富强大的互联网功能体验, ...
- BZOJ3555 [Ctsc2014]企鹅QQ[暴力+字符串hash]
菜到自闭,一道省选小水题都能给我做繁. 要求有一位不同,则对每个串每一位暴力枚举把这一位删掉,放一个分隔符,算一下hash,插表,相似的都应该会被插入同一个桶.最后把hash统计一下即可.复杂度$O( ...
- BZOJ3555 [Ctsc2014]企鹅QQ 题解
题目大意: 有一些字符串,求其中两个等长且恰好只有一位不同的字符串的对数. 思路: Hash大法好!正着倒着各来一遍(底数不同),之后枚举不同的那一位,前后两段拼起来之后为了有区分前面一部分再乘一个数 ...
- luoguP4503 [CTSC2014]企鹅QQ hash
既然只有一位的不同,那么我们可以枚举这一位.... 我们只需要快速地计算去掉某一位的$hash$值.... 由于$hash(S) = \sum s[i] * seed^i$,因此去掉第$i$位的权值只 ...
随机推荐
- 题解报告:hdu1205吃糖果(插空法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1205 Problem Description HOHO,终于从Speakless手上赢走了所有的糖果, ...
- Matlab实现Butterworth滤波器 分类: 图像处理 2014-06-02 00:05 527人阅读 评论(0) 收藏
下面是用Matlab实现的Butterworth高通.低通滤波器. clc;clear all;close all; I=imread('cameraman.tif'); subplot(3,2,1) ...
- shell 调试 2例
1.############# #!/bin/ksh if [ ! -z $TNS_ADMIN ]; then export TNS_ADMIN=`dirname $TNS_ADMIN` ...
- 给定一个整数 n,返回 n! 结果尾数中零的数量。
示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零. 代码部分 class Solution ...
- AJPFX总结在循环中break与continue的区别
相信刚学编程的人很容易被break,continue这两个关键词搞混淆了,两者都有跳出循环的意思,但是他们到底有什么区别呢?其实很简单,break是结束整个循环体,continue是结束当前这一单次循 ...
- poj3109 Inner Vertices
思路: 树状数组 + 扫描线. 实现: #include <cstdio> #include <vector> #include <algorithm> using ...
- 微信官方UI库—WeUI
WeUI 为微信 Web 服务量身设计 概述 WeUI是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一.包含button.cell ...
- 全志R58平台调通s5k5eya(RAW+MIPI)
全志R58平台调通s5k5eya(RAW+MIPI) 2017/5/31 10:30 版本:V1.1 1.前期使用的是s5k5eyx的ISP的固件/tuning 文件 Y:\s5k5eya_r58_d ...
- 数据库时间类型是 datetime 类型的处理
当数据库时间类型是datetime类型时,获取前台时间是要这样处理 ,因为数据库是把时间转换为字符类型来比较的 sb.Append(" and Date <=convert(varch ...
- markdown表格中怎么插入逻辑或符号|?
| 73向下投票接受 | 如果你删除反引号(****),使用|`黑客作品 a | r ------------|----- `a += x;` | r1 a |= y; | r2 并产生以下输出 在这 ...