#include<iostream>
//#include<cstdio>
#include "poszukiwania.h"
#include "message.h""
using namespace std;
int n, m, tab[20000010], ans, pref[10000010], i, len;
//int sig[4] = { 0, 1, 2, 3 };
//int seq[7] = { 0, 1, 2, 3, 1, 2, 3 };
//int MyNodeId()
//{
// return 0;
//}
//int SignalLength()
//{
// return 3;
//}
//int SignalAt( int x )
//{
// return sig[x];
//}
//int SeqLength()
//{
// return 6;
//}
//int SeqAt( int x )
//{
// return seq[x];
//}
int main()
{
// ios_base::sync_with_stdio( 0 );
n = SignalLength();
len = 0;
for( int a = 1; a <= n; a++ )tab[++len] = SignalAt( a );
tab[++len] = -1;
m = SeqLength();
for( int a = 1; a <= m; a++ )tab[++len] = SeqAt( a );
i = 0;
pref[1] = 0;
for( int a = 2; a <= len; a++ )
{
while( i != 0 && tab[ i + 1 ] != tab[ a ] )i = pref[ i ];
if( tab[ i + 1 ] == tab[ a ] )i++;
if( a <= n+1 )pref[ a ] = i;
if( i == n )ans++;
}
if( MyNodeId() == 0 )cout<<ans;
return 0;
}
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 48 49 50 51 52 | #include<iostream> //#include<cstdio> #include "poszukiwania.h" #include "message.h"" using namespace std; int n, m, tab[20000010], ans, pref[10000010], i, len; //int sig[4] = { 0, 1, 2, 3 }; //int seq[7] = { 0, 1, 2, 3, 1, 2, 3 }; //int MyNodeId() //{ // return 0; //} //int SignalLength() //{ // return 3; //} //int SignalAt( int x ) //{ // return sig[x]; //} //int SeqLength() //{ // return 6; //} //int SeqAt( int x ) //{ // return seq[x]; //} int main() { // ios_base::sync_with_stdio( 0 ); n = SignalLength(); len = 0; for( int a = 1; a <= n; a++ )tab[++len] = SignalAt( a ); tab[++len] = -1; m = SeqLength(); for( int a = 1; a <= m; a++ )tab[++len] = SeqAt( a ); i = 0; pref[1] = 0; for( int a = 2; a <= len; a++ ) { while( i != 0 && tab[ i + 1 ] != tab[ a ] )i = pref[ i ]; if( tab[ i + 1 ] == tab[ a ] )i++; if( a <= n+1 )pref[ a ] = i; if( i == n )ans++; } if( MyNodeId() == 0 )cout<<ans; return 0; } |
English