[ create a new paste ] login | about

Link: http://codepad.org/N3beNV7J    [ raw code | fork ]

iamyeasin - C++, pasted on Jan 22:
#include <bits/stdc++.h>
#define UNVISITED 0
#define VISITED 1

using namespace std;

long kase,m,n,longRun=-123;
int IN[123][123],table[123][123];

bool isGreater(int x, int y) { return x >= y; }
bool isOk (int x, int y) { return x>=1 && x<=n && y<=n && y>=1; }
int sub(int x, int y) { return x-y; }

void Clear(){
    for( int i=1; i<=n; i++ ){
        for( int j=1; j<=m; j++ ){
            IN[i][j] = 0; table[i][j] = UNVISITED;
        }
    }

}

bool isFalse( int i, int j ){ // Boundary problem thakte pare..
    if( isGreater(IN[i][j],IN[i][j-1]) ||
        isGreater(IN[i][j],IN[i][j+1]) ||
        isGreater(IN[i][j],IN[i-1][j]) ||
        isGreater(IN[i][j],IN[i+1][j]) ) return false;

    return true;
}

int DP ( int i, int j ){
    if( table[i][j] != UNVISITED ) return table[i][j];
    if( isFalse(i,j) ) return table[i][j] = 1;

    if( isGreater(IN[i][j],IN[i][j-1] ) && isOk(i,j-1) ){
        int ans = 1 + DP(i,j-1);
        table[i][j] = max( ans, table[i][j] ) ;
        cout << i << "," << j-1 << " " << table[i][j] << endl;
        return table[i][j];
    }
    if( isGreater(IN[i][j],IN[i][j+1]) && isOk(i,j+1) ){
        int ans = 1 + DP(i,j+1);
        table[i][j] = max( ans, table[i][j] ) ;
        cout << i << "," << j+1 << " " << table[i][j] << endl;
        return table[i][j];
    }
    if( isGreater(IN[i][j],IN[i-1][j]) && isOk(i-1,j) ){
        int ans = 1 + DP(i-1,j);
        table[i][j] = max( ans, table[i][j] ) ;
        cout << i-1 << "," << j << " " << table[i][j] << endl;
        return table[i][j];
    }
    if( isGreater(IN[i][j],IN[i+1][j] ) && isOk(i+1,j) ){
        int ans = 1 + DP(i+1,j);
        table[i][j] = max( ans, table[i][j] ) ;
        cout << i+1 << "," << j << " " << table[i][j] << endl;
        return table[i][j];
    }
}


void Solve(){
    for ( int i=1; i<=n; i++ ){
        for( int j=1; j<=m; j++ ){
            if( table[i][j] == UNVISITED ){
                int ans = DP(i,j);;
                table[i][j] = max ( ans, table[i][j] );
            }
        }
    }
}

void Print(){
    for ( int i=1; i<=n; i++ ){
        for( int j=1; j<=m; j++ ){
            cout << table[i][j] << " ";
            longRun = ( table[i][j] > longRun ) ? table[i][j] : longRun ;
        }
        cout << endl;
    }
}

int main (){

    cin >> kase;
    Clear();
    for ( int k=1; k<=kase; k++ ){
        string name; cin >> name;

        cin >> n >> m;
        for ( int i=1; i<=n; i++ ){
            for ( int j=1; j<=m; j++ ){
                cin >> IN[i][j];
            }
        }
        for( int i=1; i<=n; i++ ){
            for ( int j=1; j<=n; j++ ){
                table[i][j] = UNVISITED;
            }
        }


        Solve();

        Print();
        cout << endl;


        cout << name << ":" << longRun << endl;
        Clear();
    }


    return 0;
}


Create a new paste based on this one


Comments: