Cercetări recente au scos la iveală un vechi document scris într-un dialect ciudat denumit masaretu. Textul conţinut de acest document este format din cuvinte iar între două cuvinte există cel puţin un spaţiu.
Despre acest dialect se cunosc câteva caracteristici:
- scrierile din acest dialect folosesc literele mici ale alfabetului englez;
- toate cuvintele dialectului au exact opt litere;
- cuvintele dialectului sunt formate din silabe. Fiecare silabă are două litere dintre care una este o vocală (adică una dintre literele
a e i o u
) iar cealaltă o consoană. Rezultă că fiecare cuvânt are patru silabe.
Din păcate documentul descoperit este deteriorat: din unele cuvinte au dispărut una sau mai multe litere. Astfel în document apar grupuri formate din mai puţin de opt litere care nu mai reprezintă cuvinte ale vocabularului dialectului masaretu.
Cerința
Să se scrie un program care determină:
1) câte cuvinte corecte sunt în documentul recent descoperit.
2) silabele care apar cel mai des în cuvintele corecte din document.
Date de intrare
Fișierul de intrare masaretu.in
conține:
- pe prima linie un număr natural
V
care poate avea valoarea1
sau valoarea2
. - pe a doua linie un şir de cel mult
1000000
de caractere, care reprezintă textul documentului.
Date de ieșire
Fișierul de ieșire masaretu.out
va avea o singură linie cu următorul conţinut:
- dacă
V = 1
, atunci pe această linie se va scrie un număr care reprezintă răspunsul la prima cerință a problemei – adică numărul de cuvinte corecte din textul dat. - dacă
V = 2
, atunci pe prima linie a fişierului de ieşire se vor scrie în ordine alfabetică toate silabele care apar cel mai des în cuvintele corecte ale textului dat.
Restricții și precizări
- textul de pe a doua linie din fişier începe şi se termină cu o literă;
- în textul dat există cel puţin un cuvânt corect al dialectului masaretu;
- 20% din teste vor avea valoarea
V=1
, iar 80% din teste vor avea valoareaV=2
.
Exemplul 1
masaretu.in
1 masaretu mare dialectu andiculu tare
masaretu.out
3
Explicație
V=1
, deci se rezolvă NUMAI prima cerinţă.
Sunt trei cuvinte corecte: masaretu dialectu andiculu
Exemplul 2
masaretu.in
2 masaretu mare dialectu andiculu tare
masaretu.out
di tu
Explicație
V=2
, deci se rezolvă NUMAI a doua cerinţă.
Silabele care apar cel mai des in cele trei cuvinte corecte sunt di
si tu
. Ambele apar de două ori.
Nu se numără silabele care apar în cuvintele incorecte! Silaba re
se va număra doar o dată în cuvântul corect masaretu
şi nu se va număra în cuvintele incomplete mare
şi tare
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Masaretu:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
int v,n;
string cuvant;
int silabect[30][30];
char litera1, litera2;
int linie, coloana, cuvintect, maxim;
ifstream fin("masaretu.in");
ofstream fout("masaretu.out");
int main()
{
fin >> v;
while (fin >> cuvant)
{
if (cuvant.size() == 8)
{
cuvintect++;
for (int i=0;i<8;i=i+2)
{
litera1 = cuvant[i];
litera2 = cuvant[i+1];
linie = litera1 - 'a';
coloana = litera2-'a';
// cout << litera1<<litera2<< linie << ' ' << coloana << endl;
silabect[linie][coloana]++;
if (silabect[linie][coloana] > maxim)
maxim = silabect[linie][coloana];
}
}
}
if (v==1)
{
//cout << cuvintect << endl;
fout << cuvintect << endl;
return 0;
}
for (int i=0;i<30;i++)
for (int j=0;j<30;j++)
if (silabect[i][j] == maxim)
{
litera1 = i+'a';
litera2 = j+'a';
//cout << litera1 <<litera2<< ' ';
fout << litera1 <<litera2<< ' ';
}
//cout << endl;
fout << endl;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #1790 Masaretu
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #1790 Masaretu de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!