Cod sursa(job #638059)

Utilizator tzipleatudTudor Tiplea tzipleatud Data 20 noiembrie 2011 18:30:52
Problema DreptPal Scor 0
Compilator cpp Status done
Runda .com 2011 Marime 1.49 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream f("dreptpal.in");
ofstream g("dreptpal.out");

int n,m,i,j,v[1001][1001],p[1001][1001],r,pi,s,e;
int c,sol=0,k,l,p2,p1;
bool stop;

bool ok(int r,int i,int p1) {
    int pct=p1-p[r][p1]/2;
    int pcc=i-p[r][i]/2;
    if (pct>pcc) return true;
    return false;
}
int main () {
    f >> n >> m;
    for (i=0;i<=n+1;i++) {v[i][0]=-7;v[i][m+1]=-5;}
    for (j=0;j<=m+1;j++) {v[0][j]=-9;v[n+1][j]=-3;}
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++) f >> v[i][j];
    for (r=1;r<=n;r++) {
        pi=1;
        while (pi<=m) {
            s=pi-p[r][pi]/2;e=pi+p[r][pi]/2;stop=false;
            while (s>0 && e<=m && v[r][s]==v[r][e]) {
                s--;
                e++;
                stop=true;
            }
            p[r][pi]=e-s-1;
            p2=pi+1;p1=pi-1;
            while (p1>s && p2<e-1) {
                if (ok(r,pi,p1)) {
                    p[r][p2]=p[r][p1];
                }
                else {
                    p[r][p2]=p[r][p1];
                    pi=p2-1;
                    break;
                }
                p1--;p2++;
            }
            pi++;
        }
    }
    for (p1=1;p1<=n;p1++) {
    for (j=1;j<=m;j++) {
        s=p[1][j];k=1;
        for (i=1;i<=n;i++) {
            s=min(s,p[i][j]);
            sol=max(sol,s*k);
            k++;
        }
    }
    }
    g << sol << '\n';
    f.close();g.close();
    return 0;


}