Cod sursa(job #18500)

Utilizator bughyBondane Bogdan bughy Data 18 februarie 2007 12:26:21
Problema Reguli Scor 30
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.88 kb
#include <stdio.h>

#define input "reguli.in"
#define output "reguli.out"
#define dimmax 500001

long a[dimmax],k,n,poz[1001],first;

int main()
{
        freopen(input,"r",stdin);
        freopen(output,"w",stdout);
        long i,j,x,y,ind;
        
        scanf("%ld",&n);
        scanf("%ld",&y);
        scanf("%ld",&x);
        a[1]=x-y;
        y=x;
        
        first=a[1];
        poz[0]=1;
        poz[1]=1;
        
        for(i=3;i<=n;i++)
        {
            scanf("%ld",&x);
            a[i-1]=x-y;
            y=x;
            if(a[i-1]==first)
              poz[++poz[0]]=i-1;
        }
        poz[poz[0]+1]=n;
        //determin k
        if(poz[0]==1)
        {
           k=n-1;
           printf("%ld\n",k);
           for(i=1;i<n;i++)
              printf("%ld\n",a[i]);
              
        }
        else
        {
           k=poz[2]-poz[1];

           for(i=poz[2];i<n;i++)
           {
              ind=1;
              for(j=i;j-i+1<=k&&j<n;j++)
                  if(a[j]!=a[j-i+1])
                  {
                      ind=0;
                      break;
                  }
	      i=j-1;
              if(ind==0)
                 {
                     ind=1;
                     for(j;j<n;j++)
                        if(a[j]==first)
                        {
                          k=j-1;
                          i=j-1;
                          ind=0;
                          break;
                        }
                     if(ind)
                     {
                       k=n-1;
                       i=j-1;
                     }
                 }
           }
        }

       //afisare
         printf("%ld\n",k);
	 for(i=1;i<=k;i++)
	    printf("%ld\n",a[i]);

//        for(i=1;i<=poz[0];i++)
  //        printf("%ld ",poz[i]);
        
        return 0;
}