Cod sursa(job #2789280)

Utilizator Diana_IonitaIonita Diana Diana_Ionita Data 27 octombrie 2021 12:01:49
Problema DreptPal Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 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;
    int l[n];
    l[0]=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=1; i<n; i++)
    {
        imirror=2*c-i;
        l[i]=1;
        diff=r-i;
        if(diff>0)
            l[i]=min(l[imirror],diff);
        while(((i+l[i])<n&&(i-l[i])>=0)&&(s[i+l[i]]==s[i-l[i]]))
        {
            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[j][i]=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,i);
    }
    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[lin][j],mini);
                ar=(lin-i+1)*(mini*2-1);
                lin++;
                maxi=max(maxi,ar);
            }
        }
    }
    fout<<maxi;
    return 0;
}