POJ-1200(哈希)
2015-08-19 20:25
351 查看
2015-08-19 题意:给出两个数n,nc,并给出一个由nc种字符组成的字符串。求这个字符串中长度为n的子串有多少种。
分析:
1.这个题不用匹配,因为不高效。
2.将长度为n的子串看作n位的nc进制数,将问题转化为共有多少种十进制数字。
3.哈希时,每一个字符都对应这0---nc-1的一个数字。
代码:
#include<cstdio> #include<algorithm> #include<cstring> #include<iostream> #include<map> using namespace std; const int maxn = 16e6; char s[maxn]; unsigned int Hash[maxn]; int n,m; int name[1000]; unsigned int hash(char *str,int x) { unsigned int ans = 0; for(int i = 0; i < x; ++i) { ans=ans*m +name[*(str+i)]; } return ans; } int main() { //freopen("in","r",stdin); while(~scanf("%d%d",&n,&m)) { scanf("%s",s); int len = strlen(s),k = 0; for(int i = 0; i < len; ++i) { if(name[s[i]] == 0) name[s[i]] = k++; } for(int i = 0; i <= len - n; ++i) { unsigned int ID = hash(s+i,n); Hash[ID] = 1; } int ans = 0; for(int i = 0; i < maxn; ++i) ans += Hash[i]; printf("%d\n",ans); } }
View Code
相关文章推荐
- 设置 ProgressBar 进度条(条形) 的颜色和用代码动态控制显示的长度
- 黑马程序员----多线程的两种实现方法
- 华为成为 Linux 基金会白金会员
- 2015/8/19/横、竖、满屏/消除标题、标题栏/startActivityForResult(启动带有返回值的intent)/Intent
- 2015 HUAS Summer Trainning #6~J
- PostgreSQL Replication之第一章 理解复制概念(2)
- HDU1465 第六周L题(错排组合数)
- 在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
- PHP实现用户登录和注册的功能
- Java中异常的写法
- 浅谈UDP协议的网络编程
- myeclipse中更改web项目在tomcat中部署的路径
- tolua++的一些api的
- Solr 关于Analyzer、Tokenizer、和Filter,以及中文分词器
- 浏览器内核及差异
- uiView 设置圆角
- IE8 各种版本链接
- iOS学习笔记6-关于NSNotificationCenter及同步异步
- 海思芯片 IPC_HI3518的解读
- ios 导航控制器