Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- const int N = 100;
- int fB(int n, int m, int a[N][N], int i1, int j1, int i2, int j2){
- ///Indexare corespunzatoare pentru memorie optima
- ///dar care respecta parametrii de intrare ceruti
- i1 -= 1;
- i2 -= 1;
- j1 -= 1;
- j2 -= 1;
- ///Verificam sa nu iesim din matrice
- if ( i2 < 0 || i2 >= n || j2 < 0 || j2 >= m )
- return 2;
- ///Determinam ratiile
- int ri = i2-i1;
- int rj = j2-j1;
- int rv = a[i2][j2] - a[i1][j1];
- ///Apreciem ca ratiile sa nu fie nule
- if ( !ri || !rj || !rv )
- return 2;
- ///Orice serie are cel putin 2 elemente
- int cnt = 2;
- while ( true ){
- ///Updatam pozitiile
- i1 = i2;
- j1 = j2;
- i2 += ri;
- j2 += rj;
- ///Verificam sa nu iesim din matrice
- if ( i2 < 0 || i2 >= n || j2 < 0 || j2 >= m )
- break;
- ///Verificam sa respecte ratia valorii
- if ( a[i2][j2] - a[i1][j1] != rv )
- break;
- ///Incrementam lungimea
- cnt++;
- }
- return cnt;
- }
- int fC(int n, int m, int a[N][N])
- {
- ///Initializam maximul lungimii
- int maxL = 2;
- ///Parcurgem elementele matricii
- for ( int i = 1; i <= n; i++ )
- for ( int j = 1; j <= m; j++ )
- ///Determinam ratiile posibile pentru pozitii
- for ( int ri = 1; ri <= n/2; ri++ )
- for ( int rj = -m/2; rj <= m/2; rj++ ){
- ///Avem grija ca ratia sa nu fie nula
- if ( rj == 0 )
- continue;
- ///Determinam lungimea si updatam maximul
- int temp = fB(n, m, a, i, j, i+ri, j+rj);
- if ( temp > maxL )
- maxL = temp;
- }
- return maxL;
- }
- int main(){
- int a[N][N];
- int n, m;
- ifstream fin("progresie.in");
- fin >> n >> m;
- for ( int i = 0; i < n; i++ )
- for ( int j = 0; j < m; j++ )
- fin >> a[i][j];
- cout << fC(n, m, a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement