Pagini recente » Cod sursa (job #2592126) | Cod sursa (job #1213107) | Cod sursa (job #901956) | Cod sursa (job #1913298) | Cod sursa (job #2831111)
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
const int NL = 3;
vector <unsigned int> v;
unsigned int codul(string &s)
{
unsigned int cod = 0;
for (auto c: s)
{
cod = cod * NL + (c - 'a');
}
return cod;
}
bool exista(unsigned int c)
{
unsigned int st = 0, dr = v.size();
while (st <= dr)
{
int m = (st + dr) / 2;
if (v[m] == c)
{
return true;
}
if (c < v[m])
{
dr = m - 1;
}
else
{
st = m + 1;
}
}
return false;
}
int main()
{
ifstream in("abc2.in");
ofstream out("abc2.out");
string text, cuvant;
in >> text;
while (in >> cuvant)
{
v.push_back(codul(cuvant));
}
sort(v.begin(), v.end());
int l = cuvant.length(), nr = 0;
unsigned int p3 = 1;
for (int i = 0; i < l - 1; i++)
{
p3 *= 3;
}
unsigned int cod = 0;
for (int i = 0; i < text.length(); i++)
{
if (i < l - 1)
{
cod = cod * NL + (text[i] - 'a');
}
else
{
cod = cod % p3 * NL + (text[i] - 'a');
if (exista(cod))
{
nr++;
}
}
}
out << nr;
in.close();
in.close();
return 0;
}