F(KMP)
来源:互联网 发布:JavaScript选择年月 编辑:程序博客网 时间:2024/05/20 18:17
FTime Limit: 1000MS Memory limit: 65536K
题目描述
给出两串数字A[ ],B[ ],如果B是A的子串,那么输出B在A中第一次出现的位置,否则输出-1。
输入
第一行,输入一个T,表明后面有几组数据。每组数据的第一行,输入两个数N、M (1 <= N <= 1000000, 1 <= M <= 10000),N表示第一行数字的个数,M表示第二行数字的个数。接下来两行,分别输入A数列和B数列。
输出
输出只有一行。如果数列B在数列A中出现过,输出数列B在数列A中第一次出现的位置,如果没有出现过,输出-1。
示例输入
213 51 2 1 2 3 1 2 3 1 3 2 1 21 2 3 1 313 51 2 1 2 3 1 2 3 1 3 2 1 21 2 3 2 1
示例输出
6 10-1
提示
来源
示例程序
KMP的简单应用~
#include <stdio.h>#include <string.h>#include <stdlib.h>int s[1000001],t[10001];int next[1000001];int n,m;void getnext(){ int i=1,j=0; next[1]=0; while(i<=m) { if(j==0||t[i-1]==t[j-1]) { ++i; ++j; next[i]=j; } else j=next[j]; }}int KMP (){ int i=1,j=1; while(i<=n&&j<=m) { if(j==0||s[i-1]==t[j-1]) { ++i; ++j; } else j=next[j]; } if(j>m) return i-m; else return 0;}int main(){ int T; int i,j; int flag; scanf("%d",&T); while(T--) { scanf("%d %d",&n,&m); for(i=0;i<n;i++) scanf("%d",&s[i]); for(j=0;j<m;j++) scanf("%d",&t[j]); getnext(); flag =KMP(); if(flag) printf("%d %d\n",flag,flag+m-1); else printf("-1\n"); } return 0;}
0 0
- F(KMP)
- F - The Minimum Length HUST1010( kmp计算最小循环节)
- HDU 2594 Simpsons’ Hidden Talents (KMP的F数组应用)
- hust——1010F - The Minimum Length(kmp专练)
- CSU-ACM2017暑期训练12-KMP F
- codeforces 825F (简单dp + KMP)
- 字符串专题:F - Oulipo (A包含多少次B?KMP)
- ARC 060F Best Representation KMP(循环节)
- Educational Codeforces Round 25 F. String Compression(kmp+dp)
- CodeForces 825F String Compression---这个KMP很DP
- CodeForces 825F Educational Round #25 F:KMP最小循环节+DP
- [kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher F HUST 1010
- codeforces 710F Trie树+kmp Trie树板子和kmp板子
- poj3461 (KMP&&扩展KMP)
- f code(1)
- F#教程(一)
- oj(二)f
- F - 求素数()
- mysql的安装、C++访问mysql数据库、编码设置问题
- iBatis简单入门教程
- Android平台开源voip介绍
- ogzlcoucekcwgksnymhljajmvb
- 网络配置排错
- F(KMP)
- 同一个项目接收请求的时候每次获得的session都不同
- 的方式电饭锅地方个回复国际化风格化黄金分割
- LeetCode OJ - Best Time to Buy and Sell Stock
- 程序员的快速成长之路
- SharedPrefences的使用
- VB.NET之旅-事件驱动程序设计
- 何冲女友蚜
- LeetCode OJ -Two Sum