Cod sursa(job #2491808)

Utilizator Ricardo03Petrovici Ricardo Ricardo03 Data 13 noiembrie 2019 10:19:03
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.32 kb
#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;
}