我是靠谱客的博主 大意山水,最近开发中收集的这篇文章主要介绍hdu 5918 Harmonic Value Description 2016ACM/CCPC长春赛区现场赛H,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
Problem Description
Mr. Frog has two sequences
a1,a2,⋯,an
and
b1,b2,⋯,bm
and a number p. He wants to know the number of positions q such that sequence
b1,b2,⋯,bm
is exactly the sequence
aq,aq+p,aq+2p,⋯,aq+(m−1)p
where
q+(m−1)p≤n
and
q≥1
.
Input
The first line contains only one integer
T≤100
, which indicates the number of test cases.
Each test case contains three lines.
The first line contains three space-separated integers 1≤n≤106,1≤m≤106 and 1≤p≤106 .
The second line contains n integers a1,a2,⋯,an(1≤ai≤109) .
the third line contains m integers b1,b2,⋯,bm(1≤bi≤109) .
Each test case contains three lines.
The first line contains three space-separated integers 1≤n≤106,1≤m≤106 and 1≤p≤106 .
The second line contains n integers a1,a2,⋯,an(1≤ai≤109) .
the third line contains m integers b1,b2,⋯,bm(1≤bi≤109) .
Output
For each test case, output one line “Case #x: y”, where x is the case number (starting from 1) and y is the number of valid q’s.
Sample Input
2 6 3 1 1 2 3 1 2 3 1 2 3 6 3 2 1 3 2 2 3 1 1 2 3
Sample Output
Case #1: 2 Case #2: 1
将a数列的元素按照对p取模的值重新排列,构成新的数列,不同取模值之间加上一个-1作为分界
然后直接跑KMP即可
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
int a[200001],aa[100001],b[100001];
int loc[100001],net[100001];
int n,m;
inline void KMP()
{
int i,j;
for(i=1;i<m;i++)
{
j=i;
while(j>0)
{
j=net[j];
if(b[j]==b[i])
{
net[i+1]=j+1;
break;
}
}
}
for(i=0,j=0;i<n;i++)
{
if(j<m&&a[i]==b[j])
j++;
else
{
while(j>0)
{
j=net[j];
if(a[i]==b[j])
{
j++;
break;
}
}
}
if(j==m)
{
loc[0]++;
loc[loc[0]]=(i-m+1)+1;
}
}
}
int main()
{
int T,k=0;
scanf("%d",&T);
while(T>0)
{
T--;
k++;
int p;
scanf("%d%d%d",&n,&m,&p);
int i,j;
for(i=0;i<n;i++)
scanf("%d",&aa[i]);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
int tot=-1;
for(i=0;i<p;i++)
{
for(j=i;j<n;j+=p)
{
tot++;
a[tot]=aa[j];
}
tot++;
a[tot]=-1;
}
// for(i=0;i<=tot;i++)
// printf("%d ",a[i]);
// printf("n");
memset(net,0,sizeof(net));
loc[0]=0;
n=tot+1;
KMP();
printf("Case #%d: %dn",k,loc[0]);
}
return 0;
}
最后
以上就是大意山水为你收集整理的hdu 5918 Harmonic Value Description 2016ACM/CCPC长春赛区现场赛H的全部内容,希望文章能够帮你解决hdu 5918 Harmonic Value Description 2016ACM/CCPC长春赛区现场赛H所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复