Cerința
În arta tipografică un râu este o înșiruire de spații care se întinde pe verticală, pe liniile consecutive ale unui text. Mai precis, un râu este definit ca o secvență de cel puțin 2
spații în care oricare 2
spații de pe linii consecutive sunt adiacente pe verticală sau diagonală.
Să se scrie un program care citește numerele naturale L N
și apoi un text formatat pe N linii
de cel mult L caractere
(vezi #LungimeRandMax ), și afișează lungimea celui mai lung râu din text, dacă acesta există sau mesajul NU
, dacă nu există niciun râu.
Date de intrare
Programul citește de la tastatură numărul L
și N
, iar apoi n
rânduri formate din cel mult L
caractere.
Date de ieșire
Programul va afișa pe ecran lungimea celui mai lung râu, sau NU
, după caz.
Restricții și precizări
1 ≤ N ≤ L ≤ 100
Exemplu
Intrare
22 4 PROBLEMA DE LA EXAMEN NU MI SE PARE FOARTE GREU DE REZOLVAT IN TIMPUL ACORDAT
Ieșire
4
Explicație
Mai jos este evidențiat un râu de lungime 4
, în care spațiile au fost înlocuite cu #
:
PROBLEMA#DE LA EXAMEN NU MI SE#PARE FOARTE GREU DE#REZOLVAT IN TIMPUL#ACORDAT
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 LungimeRandMax1:
#include<bits/stdc++.h>
using namespace std;
vector<vector<int>> w;
vector<string> v;
int maxi=0;
void fill(int k,int l,int p)
{
w[k][l]=p;
maxi=max(maxi,p);
if(k+1<v.size())
{
if(l-1<v[k+1].size() && v[k+1][l-1]==' ' && w[k+1][l-1]==0)
fill(k+1,l-1,++p),p--;
if(l<v[k+1].size() && v[k+1][l]==' ' && w[k+1][l]==0)
fill(k+1,l,++p),p--;
if(l+1<v[k+1].size() && v[k+1][l+1]==' ' && w[k+1][l+1]==0)
fill(k+1,l+1,++p),p--;
}
}
int main()
{
string s;
int l,n;
cin>>l>>n;
cin.get();
for(int i=1;i<=n;i++)
{
getline(cin,s);
w.push_back(vector<int>(s.size(),0));
v.push_back(s);
}
for(int i=0;i<v.size();i++)
for(int j=0;j<v[i].size();j++)
if(v[i][j]==' ' && w[i][j]==0)
fill(i,j,1);
cout<<maxi;
}
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 #2740 LungimeRandMax1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2740 LungimeRandMax1 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!