Pagini recente » Cod sursa (job #977536) | Cod sursa (job #2256525) | Cod sursa (job #2615743) | Cod sursa (job #2493656) | Cod sursa (job #1984746)
#include<cstdio>
#include<vector>
#include<cstring>
#define key(a) (a%666013)
using namespace std;
const int nmax=1e7+5;
const int mod=666013;
vector<int> g[mod+2];
char mainu[nmax],pat[25];
inline int get_num(char ch)
{
return ch-'a';
}
inline vector<int>::iterator find_num(int n)
{
int cheie=key(n);
vector<int>::iterator it;
for(it=g[cheie].begin();it!=g[cheie].end();++it)
if(*it==n)
return it;
return g[cheie].end();
}
inline int erase_num(int n)
{
int cheie=key(n),cnt=0;
vector<int>::iterator it=find_num(n);
while(it!=g[cheie].end())
{
g[cheie].erase(it);
it=find_num(n);
cnt++;
}
return cnt;
}
int main()
{
freopen("abc2.in","r",stdin);
freopen("abc2.out","w",stdout);
int cmp=0,num=0,putere=1,lpat,n,i,cnt=0;
char cu;
gets(mainu+1);
n=strlen(mainu+1);
gets(pat+1);
lpat=strlen(pat+1);
cmp=num=0;
for(i=1;i<=lpat;i++)
{
cmp=cmp*3+get_num(pat[i]);
num=num*3+get_num(mainu[i]);
putere*=3;
}
putere/=3;
g[key(num)].push_back(num);
for(i=lpat+1;i<=n;i++)
{
num=(num-putere*get_num(mainu[i-lpat]))*3+get_num(mainu[i]);
g[key(num)].push_back(num);
}
cnt+=erase_num(cmp);
while(scanf("%c",&cu)!=EOF)
{
gets(pat+2);
pat[1]=cu;
cmp=0;
for(i=1;i<=lpat;i++)
cmp=cmp*3+get_num(pat[i]);
cnt+=erase_num(cmp);
}
printf("%d",cnt);
}