TAKMIČENJA IZ PROGRAMIRANJA


Sva pitanja, predloge ili primedbe u vezi sa takmičenjima iz programiranja možete slati na e-mail:

tak.prog@gmail.com

U toku perioda za žalbe, sve žalbe možete slati na ovaj isti e-mail.

reci.cpp    1,104 b      izvorni kod rešenja
reci.tests.rar    6,338 b      test primeri
reci.checker.cpp    470 b      izvorni kod programa za testiranje

zadatak: Reči

Mali Perica je nedavno krenuo u školu i već je naučio da čita. Pošto je Perica veoma vredan i savestan učenik, od svoje učiteljice Marije zatražio je neki zadatak gde bi mogao da proveri svoje znanje. Učiteljica Marija, srećna što ima tako dobrog učenika, odmah mu je dala jedan problem na kojem će Perica proveriti koliko dobro je savladao gradivo.

Perica je dobio mali rečnik R, koji sadrži n reči. Pored toga, učiteljica mu je dala i jednu listu L od m reči. Zadatak mu je da testira svaku reč iz liste L na sledeći način: Za svaku reč iz rečnika pronaći će sva njena pojavljivanja u reči koju testira i precrtaće svako pojavljivanje. Na kraju, Perica mora da saopšti svojoj učiteljici koliko reči iz liste ima svako svoje slovo precrtano bar jedanput.

Pomozite učiteljici Mariji tako što ćete napraviti program koji određuje koliko reči iz liste L će biti potpuno precrtano, kako bi ona lakše proverila da li je Perica dobro uradio domaći zadatak.

Ulaz:

(Ulazni podaci se nalaze u datoteci reci.in.) U ulaznoj datoteci se u prvom redu nalazi broj n (1 ≤ n ≤ 100), broj reči u rečniku R. U sledećem redu nalazi se n reči iz rečnika. Reči su razdvojene jednim razmakom i nisu duže od 10 slova. U trećem redu nalazi se broj m (1 ≤ m ≤ 100), broj reči u listi L. Narednih m redova sadrže po jednu reč iz liste L. Svaka reč iz liste neće biti duža od 100 slova. Sva slova su mala slova engleskog alfabeta.

Izlaz:

(Izlazne podatke upisati u datoteku reci.out) U prvom i jedinom redu izlazne datoteke potrebno je ispisati broj potpuno precrtanih reči.

Primer:

reci.in      reci.out
6
paja ram papa ma lama lig
7
papaja
salama
papaje
ramalama
mara
mama
miligram
        
3

Objašnjenje.

Ima 3 potpuno precrtane reči: papaja, ramalama, mama.

fajl: reci.cpp
#include <fstream>
#include <string>
#include <memory.h>

using namespace std;

const int kMaxSize = 100;

int n, m, sol;
string R[kMaxSize], word;
bool chars[kMaxSize], covered;

int main()
{
    ifstream in("reci.in");
    ofstream out("reci.out");
    in >> n;
    for (int i = 0; i < n; i++)
    {
        in >> R[i];   
    }
    in >> m;
    for (int i = 0; i < m; i++)
    {
        in >> word;
        memset(chars, false, word.length());
        for (int j = 0; j < n; j++)
        {
            for (size_t idx = word.find(R[j], 0); idx != string::npos; idx = word.find(R[j], idx + 1))
            {
                for (size_t k = 0; k < R[j].length(); k++)
                {
                    chars[idx + k] = true;   
                }
            }
        }
        covered = true;
        for (size_t j = 0; j < word.length() && covered; j++)
        {
            covered = chars[j];
        }
        if (covered)
        {
            sol++;   
        }
    }
    
    out << sol;
    in.close();
    out.close();
    return 0;
}