Pagini recente » Cod sursa (job #553554) | Cod sursa (job #3221466) | Cod sursa (job #3205426) | Cod sursa (job #1370501) | Cod sursa (job #2491808)
#include <bits/stdc++.h>
using namespace std;
struct cuvk
{
int fr;
string cuv;
}v[112501];
struct cuvn
{
int fr;
string cuv;
}z[751];
char s[1501], *p, *m, sep[] = " ,:;)(.?!><}{";
int k, i, ct, st, dr, mij, nrk, nrn, maxx, maxxbenare, nrlinie, nr, j, n, i1;
bool ok, ok1;
string c[112501], x;
int main()
{
ifstream f("catchy.in");
ofstream g("catchy.out");
f >> k;
f.get();
for(i = 1; i <= k; i++)
{
f.getline(s, sizeof(s));
p = strtok(s, sep);
while(p)
{
c[++ct] = p;
p = strtok(NULL, sep);
}
}
sort(c + 1, c + ct + 1);
v[++j].cuv = c[1];
v[j].fr = 1;
for(i = 2; i <= ct; i++)
{
if(c[i] == v[j].cuv) v[j].fr++;
else v[++ j].cuv = c[i], v[j].fr = 1;
}
nrk = j;
f >> n;
f.get();
for(i = 1; i <= n; i++)
{
f.getline(s, sizeof(s));
m = strtok(s, sep);
ct = 0;
j = 0;
while(m)
{
c[++ct] = m;
m = strtok(NULL, sep);
}
sort(c + 1, c + ct + 1);
z[++j].cuv = c[1];
z[j].fr = 1;
for(i1 = 2; i1 <= ct; i1++)
{
if(c[i1] == z[j].cuv) z[j].fr++;
else z[++ j].cuv = c[i1], z[j].fr = 1;
}
nrn = j;
maxx = 751;
ok1 = true;
for(j = 1; j <= nrn; j++)
{
x = z[j].cuv;
st = 1;
dr = nrk;
ok = false;
while(st <= dr)
{
mij = (st + dr) / 2;
if(x == v[mij].cuv)
{
ok = true;
nr = v[mij].fr / z[j].fr;
break;
}
if(x > v[mij].cuv) st = mij + 1;
else dr = mij - 1;
}
if(ok == false)
{
ok1 = false;
break;
}
if(nr < maxx && ok) maxx = nr;
if(nr < maxxbenare)
{
ok1 = false;
break;
}
}
if(maxx > maxxbenare && ok1) maxxbenare = maxx, nrlinie = i;
}
g << nrlinie << "\n" << maxxbenare;
return 0;
}