Cod sursa(job #18312)

Utilizator megabyteBarsan Paul megabyte Data 18 februarie 2007 11:25:43
Problema Reguli Scor 70
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 0.65 kb
#include <stdio.h>
#define NMAX 524288
#define INF "reguli.in"
#define OUF "reguli.out"
long long a[NMAX],dif[NMAX],secv[NMAX];
int main()
{
	int i,j,n,k,u,ok;
	FILE *in,*out;
	in=fopen(INF,"r");
	out=fopen(OUF,"w");
	fscanf(in,"%d",&n);
	for(i=0;i<n;i++) fscanf(in,"%lld",(a+i));
	for(i=1;i<n;i++) dif[i]=a[i]-a[i-1];
	k=1;secv[k]=dif[1];
	i=2;u=1;j=1;
	while(i<n)
	{
		if(j>k) j=1;
	        if(j<=k&&dif[i]==secv[j])
		{
			i++;j++;
		}
		//else if(j>k) j=1;
		else {
			for(j=u+1;j<=i;j++) {k++;secv[k]=dif[j];}
			u=i;j=1;i++;
		    }
	}
	fprintf(out,"%d\n",k);
	for(i=1;i<=k;i++) fprintf(out,"%lld\n",secv[i]);
        fclose(in);fclose(out);
        return 0;
}