#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
int n, x, y;
string curent; //Cuvantul care e citit curent
string linie; //Linia curenta
vector<string> cuv_linie; //Vector de cuvinte de pe linia curenta
vector<string> f; //Vector de linii deja parcurse
//Citeste date
cin >> n >> x >> y;
for (int i = 0; i < n; i++) {
//Citeste cuvant curent
cin >> curent;
//Daca cuvantul citit are loc pe linia curenta adauga
if (linie.length() + curent.length() + cuv_linie.size() <= y) {
cuv_linie.push_back(curent);
linie += curent;
}
else {
//Daca linia curenta e formata dintr-un cuvant adauga linia in vector final
if (cuv_linie.size() == 1)
linie = cuv_linie[0];
else {
//Numarul de despartiri intre cuvinte
int nr_despartiri = cuv_linie.size() - 1;
//Numarul total de stelute care trebuie adaugate
int nr_stelute = y - linie.length();
//Numarul de baza de stelute care trebuie adaugate intre doua cuvinte
int nr_stelute_basic = nr_stelute / nr_despartiri;
//Numarul de stelute care trebuie adaugate in plus intre primele cuvinte
int nr_stelute_speciale = nr_stelute % nr_despartiri;
//Initial linia e goala
linie = "";
//Pentru fiecare cuvant, adauga-l pe linie
for (int i = 0; i < cuv_linie.size(); i++) {
linie += cuv_linie[i];
//Daca nu e ultimul cuvant de pe linie adauga stelutele de baza
if (i != cuv_linie.size() - 1) {
linie += string(nr_stelute_basic, '*');
//Daca face parte din stelutele care trebuie adaugate in plus
if (nr_stelute_speciale) {
linie += '*';
nr_stelute_speciale--;
}
}
}
}
//Adauga linia in vector linii
f.push_back(linie);
//Linia e alcatuita acum din cuvantul curent
linie = curent;
//Sterge vectorul de cuvinte de pe linie, adauga cuvantul curent
cuv_linie.clear();
cuv_linie.push_back(curent);
}
}
//Efectueaza operatiile pentru a adauga ultima linie.
if (cuv_linie.size() == 1)
linie = cuv_linie[0];
else {
int nr_despartiri = cuv_linie.size() - 1;
int nr_stelute = y - linie.length();
int nr_stelute_basic = nr_stelute / nr_despartiri;
int nr_stelute_speciale = nr_stelute % nr_despartiri;
linie = "";
for (int i = 0; i < cuv_linie.size(); i++) {
linie += cuv_linie[i];
if (i != cuv_linie.size() - 1) {
linie += string(nr_stelute_basic, '*');
if (nr_stelute_speciale) {
linie += '*';
nr_stelute_speciale--;
}
}
}
}
f.push_back(linie);
for (int i = 0; i < f.size(); i++) {
//Afiseaza liniile
cout << f[i] << endl;
//Daca s-a atins numarul de linii per strofa lasa rand liber
if ((i + 1) % x == 0) cout << endl;
}
}
► Cerinta
Mihnea este un producător muzical și compune versurile pentru melodiile marilor artiști. Când compune o piesă, acesta scrie fiecare cuvant pe un rând diferit, pentru a-i fi mai ușor să creeze rime si să facă modificările necesare versurilor. După ce termină de scris o piesă, acesta trebuie să o transcrie într-un caiet, într-o formă care poate fi înțeleasă de artiști.