Pagini recente » Cod sursa (job #1139787) | Cod sursa (job #2313777) | Cod sursa (job #2388984) | Cod sursa (job #553075) | Cod sursa (job #612762)
Cod sursa(job #612762)
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#include<vector>
using namespace std;
#define M 90907
#define MaxN 10000010
#define ll long long
typedef vector<unsigned int>::iterator it;
vector<unsigned int> H[M];
char S[MaxN];
int ln,LN,NR;
inline unsigned int Func(char A[])
{
unsigned int a = 0;
for(int i=0;i<ln-1;i++)
a = a*3 + A[i]-'a';
return a;
}
void citire(void)
{
char A[27];
unsigned int a;
FILE *f = fopen("abc2.in","r");
fgets(S,sizeof(S),f);
while(!feof(f))
{
fgets(A,sizeof(A),f);
ln = strlen(A);
a = Func(A);
H[a%M].push_back(a);
}
fclose(f);
}
inline int ExistString(unsigned int a)
{
int b = a%M;
for(it i = H[b].begin();i<H[b].end();i++)
if(*i == a)
return 1;
return 0;
}
void solve(void)
{
unsigned int pow = 1,sol = 0;
ll sol2;
for(int i=1;i<=ln-1;i++)
pow *= 3;
for(int i=0;i<ln-1;i++)
sol = sol*3 + S[i]-'a';
NR += ExistString(sol);
for(int i=ln-1;S[i];i++)
{
sol2 = 1LL*sol*3;
sol = sol2%pow;
sol += S[i]-'a';
NR += ExistString(sol);
}
}
int main()
{
FILE *g = fopen("abc2.out","w");
citire();
solve();
fprintf(g,"%d ",NR);
fclose(g);
return 0;
}