KMP的模版实现(以hdu1711为例)
贴代码,觉得带template的有一些大材小用……不过还是按自己风格写吧!
/*******************************************************************************/
/* OS : 3.2.0-58-generic #88-Ubuntu SMP Tue Dec 3 UTC 2013 GNU/Linux
* Compiler : g++ (GCC) 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5)
* Encoding : UTF8
* Date : 2014-04-26
* All Rights Reserved by yaolong.
*****************************************************************************/
/* Description: ***************************************************************
*****************************************************************************/
/* Analysis: ******************************************************************
*****************************************************************************/
/*****************************************************************************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string> using namespace std;
template<typename S,typename T>
void get_nextval(S const * ptrn,T plen,T *nextval){ T i=; //i从0开始
nextval[i]=-;
T j=-;
while(i<plen){ if(j==-||ptrn[i]==ptrn[j]){
++i;
++j;
//if(ptrn[i]!=ptrn[j]){
nextval[i]=j;
// }else nextval[i]=nextval[j]; }else j=nextval[j];
}
}
template<typename S,typename T>
T kmp_search(S const * src,T slen,S const *ptrn,T plen,T const *nextval,T pos){ T i=pos,j=;
while(i<slen)
{
if(src[i]==ptrn[j])
{
if(j==plen-) return i-(plen-)+;
i++;j++;
}
else
{
j=nextval[j];
if(j==-) {i++;j=;}
}
}
return -; }
int src[],ptrn[];
int nextval[];
int main(){ int T,slen,plen,i;
scanf("%d",&T);
while(T--){ scanf("%d%d",&slen,&plen);
for(i=;i<slen;i++){
scanf("%d",src+i); }
for(i=;i<plen;i++){ scanf("%d",ptrn+i);
} get_nextval(ptrn, plen, nextval); printf("%d\n",kmp_search(src, slen, ptrn, plen, nextval, )); } return ; }
KMP的模版实现(以hdu1711为例)的更多相关文章
- [POJ2406&POJ1961]用KMP解决字符串的循环问题两例
翻阅了一下网上资料,发现大部分都说这题是找规律...或是说YY出的一个算法..不会证明... 然后就脑补了一下证明 ~ 结论:对于一个字符串S[1..N],如果N mod (N-next[N])=0 ...
- poj 2752 Seek the Name, Seek the Fame (KMP纯模版)
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 13840 Ac ...
- KMP模板题 Number Sequence HDU1711
模板...嗯 #include <iostream> #include <cstdio> #include <string.h> #pragma warning ( ...
- Django 模版语言详解
一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...
- Mustache 使用总结
前言: 在分析 jeesite 项目的时候,看到了 Mustache,于是查了下 正文: 1.Mustache 概述 Mustache 是基于 JavaScript 实现的模板引擎,即用来 渲染前台页 ...
- Mustache 使用心得总结
Mustache 使用心得总结 前言: 之前的一个项目里面就有用到这个前台的渲染模版,当时挺忙的也没时间抽空总结一下,刚好上周项目里又用到这个轻量型的渲染模版,真心感觉很好用,因此就总结一下使用心得, ...
- Freemarker的初次使用之FTL标签嵌套与map的使用
入职第二周了,在熟悉了公司自动化测试脚本的编写(使用什么数据库,使用哪种语言,框架带了哪些方法)后,现在开始熟悉模拟器,我们把请求发到服务器1,服务器1根据请求参数处理后将结果发给模拟器,模拟器根据服 ...
- javascript模板引擎Mustache
Mustache(英文本意:触须,胡须)是基于JavaScript实现的模版引擎,类似于JQuery Template,但是这个模版更加的轻量级,语法更加的简单易用,很容易上手. 下载:https:/ ...
- cocos2dx lua
对于游戏公司而言.採用游戏脚本lua.python等进行开发也非经常见,可是非常多童鞋对脚本并没有非常熟悉的概念,本篇则向大家简介脚本的用途以及在Cocos2dx基础使用方法: Lua和python这 ...
随机推荐
- UIAlertViewController+TextField 输入框
if (IOS8) { UIAlertController *alertController=[UIAlertController alertControllerWithTitle:CustomLoc ...
- Oracle 11g系统自己主动收集统计信息的一些知识
在11g之前,当表的数据量改动超过总数据量的10%,就会晚上自己主动收集统计信息.怎样推断10%.之前的帖子有研究过:oracle自己主动统计信息的收集原理及实验.这个STALE_PERCENT=10 ...
- android学习日记02--Activity简介
一.Activity活动 学习Android,第一个都会接触Activity滴,Activity表示一个用户界面,是Android应用程序的入口,可以同时有多个界面,但只会显示栈顶的界面. Activ ...
- send,recv,sendto,recvfrom
send函数 int send( SOCKET s, const char FAR *buf, int len, int flags ); 不论是客户还是server应用程序都用se ...
- Jordan Lecture Note-2: Maximal Margin Classifier
Maximal Margin Classifier Logistic Regression 与 SVM 思路的不同点:logistic regression强调所有点尽可能远离中间的那条分割线,而SV ...
- Java基础知识强化之网络编程笔记20:Android网络通信之 Android常用OAuth登录和分享
1. 申请百度开发者账号及百度OAuth简介. (1)申请开发者账号: http://developer.baidu.com/ (2)创建项目: http://developer.baidu.com ...
- JSP的三种类型的元素
JSP有三种类型的元素:指令元素(directive element).行为元素(action element).和脚本元素(script element). 指令元素用于指定整个JSP页面的相关信息 ...
- logstash multiline 把文件处理为单个 event
需求 多个文本文件需要存到 ES 中去. 每一个文件存放为一个 doc. 每一个文件都是多行的,行数不定,且没有固定的内容格式. update time: Mon Jun :: CST package ...
- 关于Git的merge和rebase命令解析
git rebase是对提交执行变基的操作.即可以实现将指定范围的提交"嫁接"到另外一个提交智商. 其常用的命令格式有: 用法1:git rebase --onto <new ...
- Python函数中参数* 和 ** 的区别
* 函数接收参数为元组 例如 def myfun(*args): #相当于 def myfun(1,2,3) ==> args 就相当于(1,2,3) for a in args: pri ...