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
#include <bits/stdc++.h> using namespace std; char a[101][101]; char s[101]; int cnt = 0, l[101], c, n, b[101][101]; bool inmat(int i, int j){ return i >= 1 && i <= n && j < l[i] && j >= 0; } int di[]={-1,1,-1,1,-1,1}; int dj[]={0,0,1,1,-1,-1}; void fill(int i, int j){ b[i][j] = 1; queue<pair<int, int>> Q; Q.push(make_pair(i, j)); while(!Q.empty()){ pair<int, int> x = Q.front(); c++; for(int d = 0; d <= 5; ++d){ int inou = x.first + di[d]; int jnou = x.second + dj[d]; if(inmat(inou, jnou) && a[inou][jnou] == ' ' && !b[inou][jnou]) b[inou][jnou] = b[x.first][x.second] + 1, Q.push(make_pair(inou, jnou)); } Q.pop(); } } int main(){ int k; cin >> k >> n; cin.get(); for(int i = 1; i <= n; ++i){ cin.getline(s, 101); int j = 0; while(s[j]){ a[i][j] = s[j]; j++; } l[i] = strlen(s); } int maxi = 0, x , y; for(int i = 1; i <= n; ++i) for(int j = 0; j < l[i]; ++j) if(a[i][j] == ' ' && !b[i][j]) fill(i, j); for(int i = 1; i <= n; ++i) for(int j = 1; j < l[i]; ++j) if(b[i][j] > maxi) maxi = b[i][j]; cout << maxi; return 0; }