Cod sursa(job #413008)

Utilizator titusuTitus C titusu Data 7 martie 2010 13:49:33
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
using namespace std;
#include <fstream>
#include <iostream>
#include <cstring>
#include <set>
#include <algorithm>

set<unsigned> S;
char s[10000005], c[25];

unsigned Val(char * s, int nC){
	int NR=0;
	for(int i=0;i<nC;++i)
		NR=3*NR+s[i]-'a';
	return NR;	
}

int main(){
	
	ifstream fin("abc2.in");
	int nS=0;
	char ch;
	while((ch=fin.get())>='a')  s[nS++]=ch;
	s[nS]=0;
	fin.getline(c,25);
	//cout<<s<<endl<<endl;
	//cout.flush();
	int nC=strlen(c);
	S.insert(Val(c,nC) );
	while(fin.getline(c,25))
		S.insert(Val(c,nC));
	ofstream fout("abc2.out");
	int rez=0;
	int NR=0;
	unsigned P=1;
	for(int i=0;i<nC;++i)
		NR=3*NR+s[i]-'a',P*=3;
	P/=3;
	if(S.find(NR)!=S.end())
		++rez;
	for(int i=nC;i<nS;++i){
		NR%=P;
		NR = 3*NR + s[i]-'a';
		if(S.find(NR)!=S.end())
			++rez;
	}
	fout<<rez<<endl;
	return 0;
}