Pagini recente » Cod sursa (job #636873) | Cod sursa (job #2071665) | Cod sursa (job #2989658) | Cod sursa (job #205357) | Cod sursa (job #103295)
Cod sursa(job #103295)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
const int lenmax = 10000010;
const int modul1 = 1000183;
const int modul2 = 1003397;
const int modul3 = 1010509;
const int modul4 = 1030031;
char line[lenmax], cuv[24];
int v1[modul1], v2[modul2], v3[modul3], v4[modul4];
int min(int a, int b)
{
if(a < b)
{
return a;
}
return b;
}
unsigned int conv(char* c, int l)
{
unsigned int res = 0;
int i;
for(i = 0; i < l; ++i)
{
res = 3 * res + c[i] - 'a';
}
return res;
}
int main()
{
freopen("abc2.in", "r", stdin);
freopen("abc2.out", "w", stdout);
int i, sol = 0, len, l, j;
unsigned int aux = 0, temp, t = 1;
fgets(line, lenmax, stdin);
len = strlen(line) - 1;
while(!isalpha(line[len - 1]))
{
--len;
}
fgets(cuv, 24, stdin);
l = strlen(cuv) - 1;
for(i = 1; i < l; ++i)
{
t *= 3;
}
// printf("%d\n", t);
for(i = 0; i < l; ++i)
{
aux = 3 * aux + line[i] - 'a';
}
//printf("%d\n", aux);
++v1[aux % modul1];
++v2[aux % modul2];
++v3[aux % modul3];
++v4[aux % modul4];
for(i = l; i < len; ++i)
{
aux = (aux - t * (line[i - l] - 'a')) * 3 + line[i] - 'a';
//printf("%d\n", aux);
++v1[aux % modul1];
++v2[aux % modul2];
++v3[aux % modul3];
++v4[aux % modul4];
}
//printf("\n");
do
{
temp = conv(cuv, l);
//printf("%d\n", temp);
j = min(min(v1[temp % modul1], v2[temp % modul2]), min(v3[temp % modul3], v4[temp % modul4]));
sol += j;
v1[temp % modul1] -= j;
v2[temp % modul2] -= j;
v3[temp % modul3] -= j;
v4[temp % modul4] -= j;
fgets(cuv, 24, stdin);
}
while(!feof(stdin));
printf("%d\n", sol);
return 0;
}