Pagini recente » Cod sursa (job #2822041) | Cod sursa (job #1212882) | Cod sursa (job #1016187) | Cod sursa (job #2729095) | Cod sursa (job #2293982)
#include <fstream>
#include <iostream>
#include <cstring>
#include <unordered_set>
#include <iterator>
using namespace std;
const unsigned int p = 1000003;
int hashString(char *s)
{
unsigned long long hh = 0, pp = 1;
int i ;
for ( i = strlen(s)-1 ; i >= 0; i-- )
{
hh = (hh + (pp * (s[i]-'0' + 1))) % p;
pp *= 3;
}
return (int)(hh%p);
}
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))
{
text[ltext++] = ch;
if(ch == '\n') break;
}
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';
cout << cuv << endl;
if(dictionar.find(hashString(cuv)) != dictionar.end())
nr++;
}
delete []text;
ofstream fout("abc2.out");
fout << nr;
fout.close();
return 0;
}