POJ 1200 Crazy Search(哈希)
2017-09-11 22:13
555 查看
题目链接:点击打开链接
哈希函数即一个N位的NC进制数
AC代码如下:
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <set>
#include <cstring>
using namespace std;
int N, NC, pos;
int hash_c[260];
bool re[16000005];
string ss;
void hashCaculate()
{
pos=0;
memset(hash_c,-1,sizeof(hash_c));
for(int i=0;i<ss.length();++i)
{
if(hash_c[(int)ss[i]]==-1)
hash_c[(int)ss[i]]=pos++;
//cout<<hash_c[(int)ss[i]]<<endl;
}
}
unsigned long long power(unsigned long long a, unsigned long long n)
{
if(n==0) return 1;
if(n==1) return a;
unsigned long long temp = power(a,n/2);
if(n%2) return temp*temp*a;
else return temp*temp;
}
void solve()
{
memset(re,0,sizeof(re));
unsigned long long cnt=0;
for(int i=0;i<=ss.length()-N&&i+N<=ss.length();++i)
{
unsigned long long key = 0;
//cout<<hash_c[(int)ss[i]]<<endl;
for(int j=0;j<N;++j)
{
key+=hash_c[(int)ss[j+i]]*power(NC,j);
}
if(!re[key]) re[key]=true, cnt++;
}
cout<<cnt<<endl;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
while(cin>>N>>NC)
{
cin>>ss;
hashCaculate();
solve();
ss.clear();
}
return 0;
}
哈希函数即一个N位的NC进制数
AC代码如下:
#include <iostream>
#include <string>
#include <cstdio>
#include <algorithm>
#include <set>
#include <cstring>
using namespace std;
int N, NC, pos;
int hash_c[260];
bool re[16000005];
string ss;
void hashCaculate()
{
pos=0;
memset(hash_c,-1,sizeof(hash_c));
for(int i=0;i<ss.length();++i)
{
if(hash_c[(int)ss[i]]==-1)
hash_c[(int)ss[i]]=pos++;
//cout<<hash_c[(int)ss[i]]<<endl;
}
}
unsigned long long power(unsigned long long a, unsigned long long n)
{
if(n==0) return 1;
if(n==1) return a;
unsigned long long temp = power(a,n/2);
if(n%2) return temp*temp*a;
else return temp*temp;
}
void solve()
{
memset(re,0,sizeof(re));
unsigned long long cnt=0;
for(int i=0;i<=ss.length()-N&&i+N<=ss.length();++i)
{
unsigned long long key = 0;
//cout<<hash_c[(int)ss[i]]<<endl;
for(int j=0;j<N;++j)
{
key+=hash_c[(int)ss[j+i]]*power(NC,j);
}
if(!re[key]) re[key]=true, cnt++;
}
cout<<cnt<<endl;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
while(cin>>N>>NC)
{
cin>>ss;
hashCaculate();
solve();
ss.clear();
}
return 0;
}
相关文章推荐
- Crazy Search - POJ 1200 哈希
- POJ 1200 Crazy Search(简单哈希)
- poj1200 Crazy Search——字符串哈希
- Crazy Search POJ - 1200 (简单哈希)
- POJ 1200 Crazy Search(HASH)
- poj 1200 Crazy Search
- poj1200-Crazy Search(hash入门经典)
- Crazy Search+POJ+字符串哈希
- poj 1200 Crazy Search
- poj-1200-Crazy Search-karp-rabin算法
- POJ-1200 Crazy Search,人生第一道hash题!
- poj 1200:Crazy Search (Hash)
- POJ 1200 Crazy Search(Hash)
- POJ题目1200 Crazy Search(字符串hash)
- poj 1200 Crazy Search(字符串hash)
- POJ 1200 Crazy Search(RK)
- [POJ] 1200 Crazy Search [HASH]
- POJ 1200 Crazy Search(字符串简单的hash)
- poj_1200_Crazy Search_hash
- POJ 1200 Crazy Search(哈希算法)【模板】