#include <cstdio>
#include <string>
#include <iostream>
using namespace std;
int n, m, x;
string tab_ciag[505], cyferka, tekst, wzorzec, tekst_posredni;
long long ile_zlaczen;
bool czy_byl;
int main()
{
scanf ("%d %d", &n, &m);
for (int i=0; i<n; i++)
{
scanf ("%d", &x);
tab_ciag[i].reserve(x);
for (int j=0; j<x; j++)
{
cin >> cyferka;
tab_ciag[i] += cyferka;
}
}
wzorzec.reserve(m);
for (int i=0; i<m; i++)
{
cin >> cyferka;
wzorzec += cyferka;
}
tekst += '1';
long long P[1000005];
long long obecny;
while(czy_byl == false)
{
ile_zlaczen++;
for (int i=0; i<tekst.size(); i++)
{
tekst_posredni += tab_ciag[(tekst[i] % 48) - 1];
}
tekst = wzorzec + '#' + tekst_posredni;
P[1] = 0;
obecny = 0;
for (int i=1; i<tekst.size(); i++)
{
while(obecny > 0 && tekst[obecny] != tekst[i])
{
obecny = P[obecny];
}
if(tekst[obecny] == tekst[i]) obecny++;
P[i+1] = obecny;
if(P[i+1] == wzorzec.size())
{
printf ("%lld\n", ile_zlaczen + 1);
czy_byl = true;
break;
}
}
tekst = tekst_posredni;
tekst_posredni.clear();
}
}
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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 | #include <cstdio> #include <string> #include <iostream> using namespace std; int n, m, x; string tab_ciag[505], cyferka, tekst, wzorzec, tekst_posredni; long long ile_zlaczen; bool czy_byl; int main() { scanf ("%d %d", &n, &m); for (int i=0; i<n; i++) { scanf ("%d", &x); tab_ciag[i].reserve(x); for (int j=0; j<x; j++) { cin >> cyferka; tab_ciag[i] += cyferka; } } wzorzec.reserve(m); for (int i=0; i<m; i++) { cin >> cyferka; wzorzec += cyferka; } tekst += '1'; long long P[1000005]; long long obecny; while(czy_byl == false) { ile_zlaczen++; for (int i=0; i<tekst.size(); i++) { tekst_posredni += tab_ciag[(tekst[i] % 48) - 1]; } tekst = wzorzec + '#' + tekst_posredni; P[1] = 0; obecny = 0; for (int i=1; i<tekst.size(); i++) { while(obecny > 0 && tekst[obecny] != tekst[i]) { obecny = P[obecny]; } if(tekst[obecny] == tekst[i]) obecny++; P[i+1] = obecny; if(P[i+1] == wzorzec.size()) { printf ("%lld\n", ile_zlaczen + 1); czy_byl = true; break; } } tekst = tekst_posredni; tekst_posredni.clear(); } } |
English