Pagini recente » Cod sursa (job #521241) | Clasament grafuri | Cod sursa (job #2531001) | Cod sursa (job #1075808) | Cod sursa (job #2294007)
#include <fstream>
#include <iostream>
#include <cstring>
#include <unordered_set>
#include <iterator>
using namespace std;
const unsigned int p = 1000000009;
int hashString(char *s)
{
unsigned long long hh = 0, p3 = 1;
int i ;
for ( i = strlen(s)-1 ; i >= 0; i-- )
{
hh = (hh + p3 * (s[i]-'0' + 1)) % p;
p3 = (p3*3) % p;
}
return (int)hh;
}
int main()
{
// unsigned int p3 = 1;
// for(int i = 0; i <= 20; i++)
// {
// cout << p3 << ",";
// p3 = p3 * 3;
// }
unordered_set <int> dictionar;
char cuv[23], ch, *text;
ifstream fin("abc2.in");
text = new char[10000001];
int ltext = 0;
while(fin.get(ch))
{
if(ch == '\n') break;
text[ltext++] = ch;
}
fin.get(cuv, 23);
int lcuv = strlen(cuv);
dictionar.insert(hashString(cuv));
fin.get();
while (fin.get(cuv, 23))
{
dictionar.insert(hashString(cuv));
fin.get();
}
// unordered_set<int> :: iterator itr;
// for (itr = dictionar.begin(); itr != dictionar.end(); itr++)
// cout << (*itr) << endl;
fin.close();
int nr = 0;
for(int i = 0; i <= ltext - lcuv; i++)
{
strncpy(cuv, text + i, lcuv);
cuv[lcuv] = '\0';
if(dictionar.find(hashString(cuv)) != dictionar.end())
nr++;
}
delete []text;
ofstream fout("abc2.out");
fout << nr;
fout.close();
return 0;
}