POJ 3461 还是两种方法
上午我用了Rabin-Karp算法做的。基本的数据可以测试通过,但是一提交就WA。偶滴天啊,我不知道错在哪啊。。我是非专业的。。呜呜。找了半天找不出。算了。看人家都是用KMP做的,那我下午就用KMP写一个吧。一定把它拿下!!哼哼
Rabin-Karp:
#include <iostream>#include <fstream>#include <math.h>#include <string.h> using namespace std; #define M 16381*4733+1int nCount; void Rabin_Karp(char*T,char* W,int d,int q ){//搜索W在T中的位置//参数d:字母表的进制,即字母表的元素个数//参数q:一个比较大的素数,只需d*q<字长 int n=strlen(T);int m=strlen(W);if(n<m) return;int i; __int64 h=1;for(i=1; i<=m-1; i++) //计算h h=(h*d)%q; __int64 w=0,t=0; //预处理,计算P,t0 for(i=0; i<m; i++) { w=((d*w+W[i])%q); t=((d*t+T[i])%q); }int s;for(s=0; s<n-m+1; s++) //匹配 {if(w==t) {for(i=0; i<m; i++) //进一步验证 {if(W[i]!=T[s+i])break; }if(i==m) { nCount++; } }if(s<n-m) t=(d*(t-T[s]*h)+T[s+m])%q; //计算ts+1 }} int main(){int n;char W[10001];char T[1000001]; freopen("acm.txt","r",stdin); scanf("%d",&n); getchar();while(n--) { gets(W); gets(T); nCount=0; Rabin_Karp(T,W,27,M); printf("%d\n",nCount); }return 0; }
KMP: AC的。
#include <iostream>#include <fstream>#include <string.h> using namespace std;#define N 10001#define M 1000001int next[N];int nCount; void get_next(char* str){int i=0,j=-1,len=strlen(str); next[i]=j;while(i<len) {while(j>=0 && str[i]!=str[j]) j=next[j]; i++;j++; next[i]=j; }} void kmp_search(char *T,char *W){int i=0,j=0,len1=strlen(T),len2=strlen(W);while(i<len1) {while(j>=0 && T[i]!=W[j]) j=next[j]; i++;j++; if(j==len2) { nCount++; j=next[j]; } }} int main(){int n;char W[N];char T[M]; freopen("acm.txt","r",stdin); scanf("%d",&n); getchar();while(n--) { scanf("%s",W); scanf("%s",T); memset(next,0,sizeof(next)); nCount=0; get_next(W); kmp_search(T,W); printf("%d\n",nCount); } return 0;}
POJ 3461 还是两种方法相关推荐
- POJ 4151/北大百练 4151 电影节 题解(两种方法)贪心算法基础
POJ4151 电影节 总时间限制: 1000ms 内存限制: 65536kB 描述: 大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看( ...
- SQL Server中灾难时备份结尾日志(Tail of log)的两种方法
简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...
- C++/C++11中用于定义类型别名的两种方法:typedef和using
类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...
- jquery-12 折叠面板如何实现(两种方法)
jquery-12 折叠面板如何实现(两种方法) 一.总结 一句话总结:1.根据点击次数来判断显示还是隐藏,用data方法保证每个元素一个点击次数:2.找到元素的下一个,然后toggle实现显示隐藏. ...
- java 匿名list,java创造匿名对象的两种方法
在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...
- Android Studio导入Eclipse项目的两种方法
Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...
- Response.Redirect 打开新窗体的两种方法
普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...
- centos下两种方法安装git
centos 5 64位下两种方法安装git 这里来给大家介绍下编译安装和yum安装git. 系统:centos 5.5 64位 需要的软件包:git-latest.tar.gz epel-r ...
- mysql创建库几种方法_MySQL创建数据库的两种方法
本文为大家分享了两种mysql创建数据库的方法,供大家参考,具体内容如下 第一种方法:使用 mysqladmin 创建数据库使用普通用户,你可能需要特定的权限来创建或者删除 mysql 数据库. 所以 ...
最新文章
- ecshop模板smarty foreach详解 [ECshop]
- U-net实现医学图像分割
- 我遇到的优秀年轻人都有哪些特质
- 端口以及服务常用cmd
- 一般图带权多重匹配(欧拉图+最小费用流)
- django QuerySet对象转换成字典对象
- 【2016年第6期】科研数据的开放:进展、模式与新探索
- 开源代码准确率99%+,人脸识别问题真的被解决了吗?
- MySQL 自定义函数设置执行时间_mysql自定义函数计算时间段内的工作日(支持跨年)...
- Airflow 中文文档:常见问题
- Linux进程间通信[转]
- 面向串口编程java_Java串口编程例子
- n1怎么进入线刷模式_怎么用斐讯NI天天链刷机成电视机顶盒教程
- P1350 车的放置
- RT thread 设备驱动组件之USART设备
- Python入门书 - 简明Python教程(A Byte of Python)
- aspectjweaver的作用
- matlab命令行窗口显示长度设置_MATLAB的命令窗口、图形窗口
- imdb数据集电影评论分类
- html旋转360度特效,CSS3图片旋转特效(360/60/-360度)?