Cod sursa(job #1690118)

Utilizator Vasile_RotaruVasea Rotaru Vasile_Rotaru Data 14 aprilie 2016 19:45:03
Problema Abc2 Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include<bits/stdc++.h>

using namespace std;

ifstream fin("abc2.in");
ofstream fout("abc2.out");

#define Mod 218419 

vector<string>Hash[Mod];
string s,s1;
//bool Hash[Mod];
int k,l;

int H(string s)
{
	int l=s.length(),k=0,i;
	for(i=0;i<l;++i)k+=(s[i]*i);
	return k%Mod;
}

bool find(string s)
{
	int key=H(s);
	vector<string>::iterator B=Hash[key].begin(),E=Hash[key].end();
	for(;B!=E;++B)
	if(*B==s)return 1;
	return 0;
}

void insert(string s)
{
	int key=H(s1);
	vector<string>::iterator B=Hash[key].begin(),E=Hash[key].end();
	if(find(s))return;
	Hash[key].push_back(s1);
}

int main()
{
	ios_base::sync_with_stdio(0);
	fin.tie(0);
 	fin>>s;
 	/*while(fin>>s1)Hash[H(s1)]=1;
 	l=s1.length();
 	s1="";
	for(int i=0;i<l;++i)s1+=s[i];
	int l1=s.length();
	for(int i=l;i<s.length();++i)
	{
		s1.erase(0,1);
		s1=s1+s[i];
		if(Hash[H(s1)])++k;
	}*/
 	while(fin>>s1)insert(s1);
 	l=s1.length();
 	s1="";
	for(int i=0;i<l;++i)s1+=s[i];
	if(find(s1))++k;
	for(int i=l;i<s.length();++i)
	{
		s1.erase(0,1);
		s1=s1+s[i];
		if(find(s1))++k;
	}
	fout<<k;
	return 0;
}