Cod sursa(job #2581509)

Utilizator stefanpiturStefan Alexandru Pitur stefanpitur Data 15 martie 2020 13:41:50
Problema Abc2 Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#include <fstream>
#include <set>
using namespace std;

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

const int L = 10000000;
const int l = 20;

set <long long> dictionar;

char text[L];
char cuv[l];

int characterValue(char c){
	return c - 'a';
}

int main()
{
	int ans,i,lengthT, length;
	long long nr,p;
	fin >> text;
	lengthT = (int)strlen(text);
	while(fin >> cuv){
		nr = 0;
		length = (int)strlen(cuv);
		for(i=0; i<length; i++)
			nr = nr * 3 + 1LL * characterValue(cuv[i]);
		dictionar.insert(nr);
	}
	if(lengthT < length){
		fout << "0\n";
		return 0;
	}
	nr = 0, ans = 0;
	p = 1;
	for(i=0; i<length; i++){
		nr = nr * 3 + 1LL * characterValue(text[i]);
		p *= 3;
	}
	if(dictionar.find(nr) != dictionar.end())
		ans++;
	p /= 3;
	for(; i<lengthT; i++){
		nr = (nr - p * characterValue(text[i-length])) * 3 + 1LL * characterValue(text[i]);
		if(dictionar.find(nr) != dictionar.end())
			ans++;
	}
	fout << ans << "\n";
	return 0;
}