HDU 4821 String 字符串哈希
来源:互联网 发布:php高级程序员面试题 编辑:程序博客网 时间:2024/04/28 06:19
String
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 937 Accepted Submission(s): 270
Problem Description
Given a string S and two integers L and M, we consider a substring of S as “recoverable” if and only if
(i) It is of length M*L;
(ii) It can be constructed by concatenating M “diversified” substrings of S, where each of these substrings has length L; two strings are considered as “diversified” if they don’t have the same character for every position.
Two substrings of S are considered as “different” if they are cut from different part of S. For example, string "aa" has 3 different substrings "aa", "a" and "a".
Your task is to calculate the number of different “recoverable” substrings of S.
(i) It is of length M*L;
(ii) It can be constructed by concatenating M “diversified” substrings of S, where each of these substrings has length L; two strings are considered as “diversified” if they don’t have the same character for every position.
Two substrings of S are considered as “different” if they are cut from different part of S. For example, string "aa" has 3 different substrings "aa", "a" and "a".
Your task is to calculate the number of different “recoverable” substrings of S.
Input
The input contains multiple test cases, proceeding to the End of File.
The first line of each test case has two space-separated integers M and L.
The second ine of each test case has a string S, which consists of only lowercase letters.
The length of S is not larger than 10^5, and 1 ≤ M * L ≤ the length of S.
The first line of each test case has two space-separated integers M and L.
The second ine of each test case has a string S, which consists of only lowercase letters.
The length of S is not larger than 10^5, and 1 ≤ M * L ≤ the length of S.
Output
For each test case, output the answer in a single line.
Sample Input
3 3abcabcbcaabc
Sample Output
2
Source
2013 Asia Regional Changchun
#include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <map>#include <set>#include <queue>#include <stack>#include <bitset>using namespace std;#define PB push_back#define MP make_pair#define REP(i,n) for(int i=0;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define DWN(i,h,l) for(int i=(h);i>=(l);--i)#define CLR(vis,pos) memset(vis,pos,sizeof(vis))#define PI acos(-1.0)#define INF 0x3f3f3f3f#define LINF 1000000000000000000LLtypedef unsigned long long ull;const int maxn=1e5+100;ull base=31;ull nbase[maxn],nhash[maxn];char s[maxn];int M,L;map<ull,int> p;int main (){ nbase[0]=1; FOR(i,1,maxn-1) nbase[i]=nbase[i-1]*base; while(scanf("%d%d%s",&M,&L,s)!=EOF){ int len=strlen(s); nhash[len]=0; DWN(i,len-1,0) nhash[i]=nhash[i+1]*base+s[i]-'a'+1; int ans=0; ull tmp; for(int i=0;i<L && i+M*L<=len;i++){ p.clear(); for(int j=i;j<i+M*L;j+=L){ tmp=nhash[j]-nhash[j+L]*nbase[L]; p[tmp]++; } if(p.size()==M) ans++; for(int j=i+M*L;j+L<=len;j+=L){ tmp=nhash[j-M*L]-nhash[j-(M-1)*L]*nbase[L]; p[tmp]--; if(p[tmp]==0) p.erase(tmp); tmp=nhash[j]-nhash[j+L]*nbase[L]; p[tmp]++; if(p.size()==M) ans++; } } cout<<ans<<endl; } return 0;}
0 0
- HDU 4821 String 字符串哈希
- HDU 4821 String 字符串哈希
- HDU 4821 String(字符串哈希)
- 2013ICPC 长春I HDU 4821 String 字符串哈希
- [hdu 4821]String 字符串hash
- HDU 4821 String 字符串hash
- [字符串hash] hdu 4821 String
- HDU 4821 String 字符串HASH
- HDU 4821 String 字符串HASH
- hdu 4821 String 字符串hash
- hdu 4821 String(枚举 + 字符串hash)
- HDU 4821 String(字符串hash)
- HDU 4821 String 字符串hash(水
- hdu 4821 String(字符串hash+map)
- [HDU 4821]String[字符串hash][存疑]
- hdu 4821String(字符串hash)
- HDU 4821String(字符串hash)
- HDU 4821 字符串哈希
- zoj 3800
- java类文件打包成.exe文件的软件-exe4j
- java编程思想学习笔记:如何选择继承与组合
- 诺贝尔物理学奖揭晓:LED灯将点亮整个21世纪
- Eclipsed 平台下c/c++的开发
- HDU 4821 String 字符串哈希
- 互联网产品中的细枝末节(1)
- Fragment之间的通信
- Android代码混淆的使用
- 排序-c语言实现(摘自数据结构与算法分析c语言实现)
- 黑马程序员_JAVA_银行调度管理系统
- C++ Primer学习笔记6 标准库类型(命名空间的using声明、标准库string类型)
- 优先队列(堆) - C语言实现(摘自数据结构与算法分析 C语言描述)
- 实例介绍Cocos2d-x中Box2D物理引擎:HelloBox2D