1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "message.h"
#include "poszukiwania.h"

#include <cstdio>
typedef long long LL;

LL n,m;
LL pp,hasz_n,hasz_m,p=1000000007LL,q=3000000019LL;
int res;

int main()
{
	if(MyNodeId()==0)
	{
	pp=p;
	m=SignalLength();
	n=SeqLength();
	if(m>n)
	{
		printf("0");
		return 0;
	}
	for(LL i=1; i<=n; ++i)
	{
		hasz_n+=SeqAt(i);
		hasz_n*=p;
		hasz_n%=q;
		if(i<=m)
		{
			hasz_m+=SignalAt(i);
			hasz_m*=p;
			hasz_m%=q;
			pp*=p;
			pp%=q;
		}
		else
		{
			hasz_n-=((SeqAt(i-m)*pp)%q);
			hasz_n+=q;
			hasz_n%=q;
		}
		if(hasz_n == hasz_m && i>=m)
			++res;
	}
	printf("%d", res);
	}
}