Pagini recente » Cod sursa (job #1396283) | Cod sursa (job #2826086) | Cod sursa (job #38562) | Cod sursa (job #491221) | Cod sursa (job #106151)
Cod sursa(job #106151)
#include <stdio.h>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <map>
using namespace std;
#define in "abc2.in"
#define out "abc2.out"
#define dim 10000003
char Cuvant[dim];
char linie[23];
int P[23], S[23];
int N, M, Q;
int mij, v;
bool Sel[3000001];
int BinaryS(string,int,int);
int Solve(string,string);
int main()
{
int ok = 1, poz, j, q;
int T, pow;
P[1] = 1;
for ( int i = 2; i <= 20; i++ )
P[i] = P[i-1]*2;
FILE *fin = fopen(in,"r");
freopen(out,"w",stdout);
fgets(Cuvant,dim-1,fin);
poz=0;
while ( Cuvant[poz] >= 'a' && Cuvant[poz] <= 'c' ) poz++;
N = poz;
while ( fgets(linie,22,fin) )
{
poz = j = 0;
T = 0;
while ( linie[poz] >= 'a' && linie[poz] <= 'c' )
{
S[poz] = (int)linie[poz]-96;
poz++;
}
M = poz;
pow = P[M];
while ( j < poz )
{
if ( S[j] == 3 ) S[j] = 4;
T += S[j]*pow;
pow /= 2;
j++;
}
Sel[T] = 1;
}
fclose(fin);
//sort(S.begin(),S.end());
// M = S[1].size();
// Q = 0;
for ( int i = 0; i <= N-M; i++ )
{
T = 0;
for ( int j = i, pow = P[M]; j < i+M; j++ )
{
q = (int)Cuvant[j]-96;
if ( (int)Cuvant[j]-96 == 3 ) q = 4;
T += q*pow, pow /= 2;
}
if ( Sel[T] ) Q++;
}
printf("%d", Q);
}
/*
int BinaryS(string A, int st, int dr)
{
while ( st <= dr )
{
mij = (st+dr)>>1;
if ( S[mij] > A ) dr = mij - 1;
else if ( S[mij] < A ) st = mij + 1;
else return 1;
}
return 0;
}*/