Cod sursa(job #1710047)

Utilizator pistakuszSAPIENTIA reMechLis pistakusz Data 28 mai 2016 14:53:04
Problema Pq Scor 0
Compilator c Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.53 kb
#include <stdio.h>
#include <stdlib.h>

int megold(int * A,int n){
    int **B=(int**)calloc(n,sizeof(int*));
    int i,j,k;
    for ( i=0; i<n; ++i ){
        B[i]=(int*)calloc(n,sizeof(int));
    }
    if (!B[n-1]){
        return -2;
    }
    for (j=1;j<n;++j){
        for (i=j-1;i>=0;--i){
            if (A[i]==A[j]){

                if ((i!=0 && B[i-1][j]==-1) || B[i][j-1]==-1){
                    ;
                }else{
                    B[i][j]=1;
                    B[n-1][0]=(B[n-1][0]<(j-i))?(j-i):B[n-1][0];
                    for (k=i;k>=0;--k){
                        B[k][j]=-1;
                    }
                    for (k=j;k<n;++k){
                        B[i][k]=-1;
                    }
                }
            }
        }
    }
    //MatOut(B,n);
    return (B[n-1][0]==0)?-1:B[n-1][0];
}

void MatOut(int **A,int n){
    int i,j;
    for (i=0;i<n;++i){
        for (j=0;j<n;++j){
            printf("%3i ",A[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main()
{
    FILE * f=fopen("pq.in","r");
    FILE * g=fopen("pq.out","w");
    if (!f)
    {
        return -1;
    }
    int n,q,i;
    fscanf(f,"%i %i",&n,&q);
    int *A = (int*)malloc(n*sizeof(int));
    for ( i=0; i<n; ++i )
    {
        fscanf(f, "%i", A+i);
    }
    int u,v;

    while (fscanf(f,"%i",&u)!=EOF && fscanf(f,"%i",&v)!=EOF){
        u--;
        v--;
        fprintf(g,"%i\n",megold(A+u,v-u+1));
    }

    fclose(f);
    fclose(g);
    return 0;
}