Pagini recente » Cod sursa (job #794729) | Cod sursa (job #187396) | Cod sursa (job #2687796) | Cod sursa (job #2623189) | Cod sursa (job #1731964)
#include <bits/stdc++.h>
#define P 123457
#define Q 1000003
using namespace std;
char a[2000005], b[2000005];
queue <char> q;
int n, top, cnt, sol[105], m;
ifstream f("strmatch.in");
ofstream g("strmatch.out");
int main()
{
f >> a;
n = strlen(a);
f >> b;
m = strlen(b);
if(n > m) g << "0\n";
else
{
cout << 1;
int cod1, cod2, i, cod3, cod4, z1, z2;
z1 = z2 = 1;
cod1 = cod2 = cod3 = cod4 = 0;
for(i = 0; i < n; i++)
{
cod1 = (cod1 * 10 + a[i]) % P;
cod3 = (cod3 * 10 + a[i]) % Q;
if (i != 0)
z1 = (z1 * 10) % P,
z2 = (z2 * 10) % Q;
}
for(i = 0; i < n; i++)
{
cod2 = (cod2 * 10 + b[i]) % P;
cod4 = (cod4 * 10 + b[i]) % Q;
}
cout << cod1 << " " << cod3 << "\n\n";
if(cod1 == cod2 && cod3 == cod4)
cnt++, sol[++top] = 0;
cout << cod2 << " " << cod4 << "\n";
for(i = n; i < m; i++)
{
cod2 = ((cod2 - (b[i - n] * z1) % P + P) * 10 + b[i]) % P;
cod4 = ((cod4 - (b[i - n] * z1) % Q + Q) * 10 + b[i]) % Q;
cout << cod2 << " " << cod4 << "\n";
if(cod1 == cod2 && cod3 == cod4)
cnt++, sol[++top] = i - n + 1;
}
g << cnt << "\n";
for(i = 1; i <= top; i++)
g << sol[i] << " ";
g << "\n";
}
f.close();
g.close();
return 0;
}