列表

详情


NC14694. 栗酱的数列

描述

栗酱有一个长度为n的数列A,一个长度为m的数列B,现在询问A中有多少个长度为m的连续子序列A',
满足(a'1+b1)%k = (a'2+b2)%k = …… = (a'm + bm)%k。

输入描述

第一行一个数T,表示有T组数据。
对于每组数据,
第一行三个整数,n, m, k。
第一行输入n个数, a1,a2,…,an, 表示A数列中的数,
第二行输入m个数, b1,b2,…,bm, 表示B数列中的数。

输出描述

每一组数据输出一行,满足条件的连续子序列数量。

示例1

输入:

2
3 2 5
7 8 7
8 7
3 2 5
7 8 9
8 7

输出:

1
2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++11(clang++ 3.9) 解法, 执行用时: 332ms, 内存消耗: 1536K, 提交时间: 2017-12-23 18:54:31

#include <stdio.h>
int main()
{
	int T,n,m,k,z,i,j,a[200010],b[200010];
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d%d",&n,&m,&k);
		for(i=0;i<n;i++)		
			scanf("%d",&a[i]);			
		for(i=0;i<m;i++)
			scanf("%d",&b[i]);
		for(z=i=0;i<=n-m;i++)
		{
			for(j=1;j<m;j++)
			{
				if((a[i+j]+b[j])%k!=(a[i+j-1]+b[j-1])%k)
					break;
			}
			if(j>=m)
				z++;
		}
		printf("%d\n",z);
	}
	return 0;
}

上一题