http://acm.hdu.edu.cn/showproblem.php?pid=4821

昨晚卡了非常久,開始TLE,然后优化了之后,由于几个地方变量写混。一直狂WA。搞得我昨晚都失眠了,,。

这几次hash军写错的变量--tmp=(j==m-1)?ah[j]:(ah[j]-ah[j-m]*base[m]);  外层循环变量是i,我写的字符串hash的几题都写成tmp=(i==0)?

ah[j]:(ah[j]-ah[j-m]*base[m]); 二逼啊

题目大意:

给定一个字符串(最长10^5)。

从中选一个长度为 m * l 的子串。要求该子串能拆分为m个长度为 l 的一一不同的串(串仅仅要有一个字母不同即觉得是不同)。

问有多少种取法。


优化的方法--从字符串第一个位置開始,每L个的hash都算出来,当到了第一个第m个L位置的时候。继续往后算--去掉第一个L的hash值,加上第m*l+m的hash值

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <iostream>
#include <cmath>
#include <map>
#include <set>
#include <queue>
using namespace std; #define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i<e;i++)
#define repe(i,s,e) for(int i=s;i<=e;i++)
#define CL(a,b) memset(a,b,sizeof(a))
#define IN(s) freopen(s,"r",stdin)
#define OUT(s) freopen(s,"w",stdin) const ull B = 1e8+7;
const int MAXN = 100010; ull ah[MAXN],base[MAXN];
char a[MAXN];
int n;//length of a int main()
{
//IN("hdu4821.txt");
int m,ll;
int ans=0,cnt,last,sc;
base[0]=1;
ull tmp;
rep(i,1,MAXN)
base[i]=base[i-1]*B;
while(~scanf("%d%d",&ll,&m))
{
scanf("%s",a);
n=strlen(a);
ah[0]=a[0];ans=0;
for(int i=1;i<=n;i++)
ah[i]=ah[i-1]*B+a[i]; //ah[i] 以i结尾的字符串的hash值
for(int i=0;i<m && i+ll*m<=n;i++)
{
map<ull,int>mp;
for(int j=i+m-1;j<i+ll*m;j+=m)
{
tmp=(j==m-1)? ah[j]:(ah[j]-ah[j-m]*base[m]);
mp[tmp]++;
}
if(mp.size()==ll)ans++;
int pos=i+m-1;
tmp=(i==0)? ah[m-1]:(ah[pos]-ah[pos-m]*base[m]);
mp[tmp]--;
if(mp[tmp] == 0)mp.erase(tmp);
for(int j=i+ll*m+m-1;j<n;j+=m)
{
tmp=ah[j]-ah[j-m]*base[m];
mp[tmp]++;
if(mp.size()==ll)ans++;
pos+=m;
tmp=ah[pos]-ah[pos-m]*base[m];
mp[tmp]--;
if(mp[tmp] == 0)mp.erase(tmp);
}
mp.clear();
}
printf("%d\n",ans);
}
return 0;
}

hdu 4821 字符串hash+map判重 String (长春市赛区I题)的更多相关文章

  1. (通俗易懂小白入门)字符串Hash+map判重——暴力且优雅

    字符串Hash 今天我们要讲解的是用于处理字符串匹配查重的一个算法,当我们处理一些问题如给出10000个字符串输出其中不同的个数,或者给一个长度100000的字符串,找出其中相同的字符串有多少个(这样 ...

  2. HDU 4821 字符串hash

    题目大意: 希望找到连续的长为m*l的子串,使得m个l长的子串每一个都不一样,问能找到多少个这样的子串 简单的字符串hash,提前预处理出每一个长度为l的字符串的hash值 #include < ...

  3. hdu 5012 bfs --- 慎用STL 比方MAP判重

    http://acm.hdu.edu.cn/showproblem.php?pid=5012 发现一个问题 假设Sting s = '1'+'2'+'3'; s!="123"!!! ...

  4. POJ3087 Shuffle'm Up —— 打表找规律 / map判重

    题目链接:http://poj.org/problem?id=3087 Shuffle'm Up Time Limit: 1000MS   Memory Limit: 65536K Total Sub ...

  5. poj 1564 Sum It Up | zoj 1711 | hdu 1548 (dfs + 剪枝 or 判重)

    Sum It Up Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Sub ...

  6. hdu 4622 (hash+“map”)

    题目链接:https://vjudge.net/problem/HDU-4622 题意:给定t组字符串每组m条询问--求问每条询问区间内有多少不同的子串. 题解:把每个询问区间的字符串hash一下存图 ...

  7. BFS以及hash表判重的应用~

    主要还是讲下hash判重的问题吧 这道题目用的是除法求余散列方式 前几天看了下算法导论 由于我们用的是线性再寻址的方式来解决冲突问题 所以hash表的大小(余数的范围)要包含我们要求的范围 对mod的 ...

  8. hdu 2610 2611 dfs的判重技巧

    对于全排列枚举的数列的判重技巧 1:如果查找的是第一个元素 那么 从0开始到当前的位置看有没有出现过这个元素 出现过就pass 2: 如果查找的不是第一个元素 那么 从查找的子序列当前位置的前一个元素 ...

  9. Hdu 4821 (字符串hash+map)

    题目链接https://vjudge.net/problem/HDU-4821 题意:给定字符串S ,询问用几个子串满足 : 1.长度为n*len  . 2. n个子串都不相同. 题解:倒序hash将 ...

随机推荐

  1. NOIP2010关押罪犯

    题目描述 S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨气值”(一个正整数值)来表示 ...

  2. 【AC自动机】【高斯消元】hdu5955 Guessing the Dice Roll

    http://blog.csdn.net/viphong/article/details/53098489 我有一点不是很懂,这样算出来转移到AC自动机根节点的概率是一个远大于1的数. 按我的理解,因 ...

  3. 【暴力】Codeforces Round #398 (Div. 2) A. Snacktower

    题意不复述. 用个bool数组记录一下,如果某一天,当前剩下的最大的出现了的话,就输出一段. #include<cstdio> using namespace std; int n; bo ...

  4. 【二分答案】【字符串哈希】bzoj2084 [Poi2010]Antisymmetry

    显然只有偶数长度的串符合题意,并且如果一个串符合题意,那么从其首尾各截掉一个字符也符合题意. 于是枚举中心,二分可以向左右扩展的最远距离,累计答案. #include<cstdio> #i ...

  5. Social regularizations

    trust-aware :如何从隐式信任中导出显示信任.链接预测就是搞这一方面的么? 和类似谱聚类的拉普拉斯矩阵结合在一起,没怎么看.

  6. Word2010插入页码分节符

    不是分页符,分节符主要是为了插入前后两种不同类型的页码,比如前面查罗马数字,从目录开始插入阿拉伯数字.                 

  7. 如何垂直居中元素(浮动元素&居中一个<img>)?

    1.如何居中一个浮动元素? 方法一:已知元素的高度   <!DOCTYPE html> <html lang="en"> <head> < ...

  8. 转载:win10 下安装Oracle 11g(问题:环境不满足最低要求)

    安装oracle11g时遇到INS-13001环境不满足最低要求 在以管理员身份运行setup.exe之后,出现了:[INS-13001]环境不满足最低要求,通过网上搜索之后找到了解决途径 首先,打开 ...

  9. OpenGL ES2.0编程三步曲 -转

    原地址:http://blog.csdn.net/myarrow/article/details/7707943 1. 保存全局变量的数据结构 以下例子程序均基于Linux平台. typedef st ...

  10. ES6笔记之参数默认值(译)

    原文链接:http://dmitrysoshnikov.com/ 原文作者:Dmitry Soshnikov 译者做了少量补充.这样的的文字是译者加的,可以选择忽略. 作者微博:@Bosn 在这个简短 ...