poj 1200 hash
来源:互联网 发布:centos jdk rpm 编辑:程序博客网 时间:2024/04/30 08:43
瞄了别人的解法才会做 http://www.cnblogs.com/rainydays/archive/2011/06/23/2088081.html
hash题要想出合适的hash方法也是一个关键。
将字符串转变成数字串,如果知道了最多有n个字符串,就等于是数字最大不超过n,把字符串看做n进制,就可以每一个独一无二的数字串转变为一个独一无二的十进制数字。
#include<iostream> #include<vector>#include <string> #include<algorithm> #include<fstream>#include<cmath> using namespace std; #define lch(i) ((i)<<1) #define rch(i) ((i)<<1|1) #define sqr(i) ((i)*(i)) #define pii pair<int,int> #define mp make_pair #define FOR(i,b,e) for(int i=b;i<=e;i++) #define FORE(i,b,e) for(int i=b;i>=e;i--) #define ms(a) memset(a,0,sizeof(a)) const int maxnum =16000007;const int INF = 1000000000;int tol,n,m,newn;bool hashtable[maxnum];char allstring[maxnum];int toint[260],t=0;int main() { /*string tmp;fstream fin("G:/1.txt"); while(!fin.eof()){ fin>>n>>m;*/while(scanf("%d%d",&n,&m)!=EOF){tol=0;ms(hashtable);ms(allstring);ms(toint);scanf("%s",allstring);/*fin>>tmp;*/int num=strlen(allstring);FOR(i,0,num-1){if(toint[allstring[i]]==0)toint[allstring[i]]=++t;}int sum=0,maxsum=m;FOR(i,0,n-2){sum=sum*m+toint[allstring[i]];maxsum*=m;//求出hash出的最大值}FOR(i,n-1,num-1){sum=(sum*m+toint[allstring[i]])%maxsum;//取余去掉最高位if(!hashtable[sum]){tol++;hashtable[sum]=1;}}printf("%d\n",tol);}return 0;}
1 0
- poj 1200 hash
- POJ 1200 字符串hash
- POJ 1200 Hash
- poj 1200字符串hash
- poj 1200 (字符串hash)
- poj 1200 hash
- poj 1200 (hash)
- POJ 1200 Hash
- poj 1200 hash
- POJ 1200 Hash
- POJ 1200字符串hash
- POJ 1200 Crazy Search //HASH
- poj 1200 Crazy Search【hash】
- poj 1200(字符串hash)
- POJ 1200 Crazy Search(Hash)
- POJ 1200 Crazy Search(hash).
- [POJ] 1200 Crazy Search [HASH]
- poj 1200:Crazy Search (Hash)
- 第六周项目四 后缀表达式
- java的多线程
- 7,8天
- 【JQuery】动态加载的图片如何实现LazyLoad
- Javascript模块化编程
- poj 1200 hash
- java switch支持的数据类型
- 如何拓展OpenStack nova
- 如何反编译Android的Apk文件获取其代码和资源文件
- 程序对文本的操作
- git 在patch中的使用
- LSGO软件技术团队2015~2016学年第七周(1012~1018)总结
- 一个简单地ViewPager自定义的轮播图
- Android的资源文件分类