F

原创 2015年11月20日 17:27:00

F

Time 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。

示例输入

2
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 1 3
13 5
1 2 1 2 3 1 2 3 1 3 2 1 2
1 2 3 2 1

示例输出

6 10
-1

提示

 

来源

 zmx

示例程序

 
#include<stdio.h>  
#include<string.h>  
#include<stdlib.h>  
int  a[1000001],b[1000001];  
int next[1000000];  
void Next(int str[],int len)  
{  
    next[0] = -1;  
    for(int j = 1 ; j < len ; j++)  
    {  
        int i = next[j-1];  
        while(str[j] != str[i+1] && i >= 0)  
        {  
            i = next[i];  
        }  
        if(str[j] == str[i+1])  
        {  
            next[j] = i+1;  
        }  
        else  
        {  
            next[j] = -1;  
        }  
    }  
}  
int kmp(int des[],int len1,int pat[],int len2)  
{  
    Next(pat,len2);  
    int p=0,s=0;  
    while(p < len2  && s < len1)  
    {  
        if(pat[p] == des[s])  
        {  
            p++;s++;  
        }  
        else  
        {  
            if(p==0)  
            {  
                s++;  
            }  
            else  
            {  
                p = next[p-1]+1;  
            }  
        }  
    }  
    if(p < len2)  
    {  
        return -1;  
    }  
    return s-len2+1;  
}  
int main()  
{  
int i,j,n,m,k,t,l1,l2;  
scanf("%d",&n);  
while(n--)  
{  
scanf("%d %d",&m,&t);  
{  
for(i=0;i<m;i++)  
scanf("%d",&a[i]);  
for(i=0;i<t;i++)  
scanf("%d",&b[i]);  
k=kmp(a,m,b,t);  
if(k!=-1)  
printf("%d %d\n",k,k+t-1);  
else  
printf("%d\n",k);  
}  
}  
}  

f f

fdsa fs
  • hello16879
  • hello16879
  • 2010年06月25日 20:51
  • 19

F - F

Little Petya likes permutations a lot. Recently his mom has presented him permutation q1, q2, ..., q...
  • sinat_37668729
  • sinat_37668729
  • 2017年11月23日 00:09
  • 40

F———F

F - F Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit   Stat...
  • leibniz_zhang
  • leibniz_zhang
  • 2016年03月22日 14:45
  • 178

f

  • cnt6859
  • cnt6859
  • 2006年08月10日 10:14
  • 343

F

F Time Limit: 1000MS Memory limit: 65536K 题目描述 给出两串数字A[ ],B[ ],如果B是A的子串,那么输出B在A中第...
  • yeguxin
  • yeguxin
  • 2014年06月21日 20:27
  • 378

tail -f -F区别

-f 是--follow[=HOW]的缩写, 可以一直读文件末尾的字符并打印出来. "[=HOW]"有两个写法,一个"=descriptor",另一个是"=name", 默认使用的是"descr...
  • climb_up
  • climb_up
  • 2015年08月30日 11:32
  • 586

f = f * i

代码: long f = 1; for(int i = 1 ; i System.out.println(f = f*i); 之前一直以为f 的值是固定的1,后来测试才发现,f 的值随着...
  • lyy98521
  • lyy98521
  • 2015年04月10日 10:11
  • 372

F - F FZU 1150

F - F Time Limit:1000MS    Memory Limit:32768KB    64bit IO Format:%I64d & %I64u SubmitStatusPr...
  • xiangchengshishuiguo
  • xiangchengshishuiguo
  • 2016年11月22日 09:24
  • 150

F - F (dfs)

Farmer John has installed a new security system on the barn and now must issue a valid password to t...
  • a1046765624
  • a1046765624
  • 2017年08月10日 20:53
  • 56

jquery的$F()函数

$F()是一个能够简化编码量的函数, 对于字符输入控件有效,包括input、textarea、select等,该函数的输入参数为这些输入控件元素对象的id或元素对象本身,函数负责返回这些输入控件元素对...
  • lmb55
  • lmb55
  • 2016年06月25日 19:45
  • 2552
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:F
举报原因:
原因补充:

(最多只允许输入30个字)