Cod sursa(job #1310210)

Utilizator BeilandArnoldArnold Beiland BeilandArnold Data 6 ianuarie 2015 16:25:05
Problema Reguli Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.71 kb
#include <cstdio>
#include <vector>
#include <limits>

const long long INF=std::numeric_limits<long long>::max();

int main(){
	FILE *fin=fopen("reguli.in","r");
	FILE *fout=fopen("reguli.out","w");

	unsigned n; fscanf(fin,"%u\n",&n);

	std::vector<long long> dif(n);
	dif[0]=INF;

	long long old; fscanf(fin,"%lld\n",&old);
	for(unsigned i=1;i<n;++i){
		long long x; fscanf(fin,"%lld\n",&x);
		dif[i]=x-old;
		old=x;
	}

	unsigned L=1;
	unsigned sf=0;

	for(unsigned i=1;i<n;++i){
		if(dif[i]==dif[i-L] && (i==n-1||dif[i+1-L]==dif[i+1]||sf+1==L)) ++sf;
		else{
			sf=0;
			L=i;
		}

		if(sf==L){
			sf=0;
		}
	}
	fprintf(fout,"%u\n",L);
	for(unsigned i=1;i<=L;++i) fprintf(fout,"%lld\n",dif[i]);

	fclose(fout);
	fclose(fin);
}