Cod sursa(job #2785853)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 19 octombrie 2021 18:13:32
Problema DreptPal Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("dreptpal.in");
ofstream fout("dreptpal.out");
int a[1001][1001];
void pal(int s[],int n,int j)
{

    if(n==0)
        return;
    n=2*n+1;
    int l[n];
    l[0]=0;
    l[1]=1;
    int c=1;
    int r=2;
    int i=0;
    int imirror;
    int maxl=1;
    int maxc=0;
    int start=-1;
    int end=-1;
    int diff=-1;
    for(i=2; i<n; i++)
    {
        imirror=2*c-i;
        l[i]=0;
        diff=r-i;
        if(diff>0)
            l[i]=min(l[imirror],diff);
        while(((i+l[i])<n&&(i-l[i])>0)&&(((i+l[i]+1)%2==0)||(s[(i+l[i]+1)/2]==s[(i-l[i]-1)/2])))
        {
            l[i]++;
        }

        if(l[i]>maxl)
        {
            maxl=l[i];
            maxc=i;
        }
        if(i+l[i]>r)
        {
            c=i;
            r=i+l[i];
        }
    }
    long long sum=0;
    for(i=0; i<n; i++)
    {
        a[i][j]=l[i];
    }
    //  fout<<sum;
}
int main()
{
    int n,m;
    fin>>n>>m;
    int i,j;
    int s[1001];
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            fin>>s[j];
            pal(s,m,j);
        }
    }
    int maxi=0;
    int ar=0;
    for(i=0; i<n; i++)
    {
        for(j=0; j<m; j++)
        {
            int lin=i;
            int  mini=(a[i][j]);
            while(lin<n)
            {
                mini=min(a[i][j],mini);
                ar=(lin-i+1)*(mini*2+1);
                lin++;
                maxi=max(maxi,ar);
            }
        }
    }
    fout<<maxi;
    return 0;
}