Pagini recente » Cod sursa (job #1506866) | Cod sursa (job #963942) | Cod sursa (job #210207) | Cod sursa (job #2719960) | Cod sursa (job #2296804)
#include<fstream>
#include<cstring>
#include<unordered_map>
using namespace std;
int CalcMask(string s, int n)
{
int p = 1, sum = 0;
for(int i=n - 1; i>=0; i--) {
sum += (s[i] - 'a')*p;
p *= 3;
}
return sum;
}
int RenewMask(string s, int n, int start, int pk, int x)
{
int aux = (s[start+n] - 'a') - (s[start] - 'a')*pk;
return (aux + 3*x);
}
int main ()
{
ifstream in("abc2.in");
ofstream out("abc2.out");
unordered_map <int, int> h;
string sir, s;
in >> sir;
int n, pk=1;
while(in >> s) {
n = s.size();
h[CalcMask(s, n)] ++;
}
int x = CalcMask(sir, n);
for (int i = 0; i<n;++i){
pk*=3;
}
//pk *= 3;
int ct = 0;
if(h[x] != 0) {
ct ++;
}
int m = sir.size();
for(int i=0; i< m-n; i++) {
x = RenewMask(sir, n, i, pk, x);
if(h[x] != 0) {
ct ++;
}
}
out << ct;
return 0;
}