Pagini recente » Cod sursa (job #2289610) | Cod sursa (job #2427207) | Cod sursa (job #680702) | Cod sursa (job #1500486) | Cod sursa (job #93131)
Cod sursa(job #93131)
#include <stdio.h>
#include <stdlib.h>
#include <alloc.h>
FILE *f,*g;
int *x,*a,n;
void citire();
void diferente();
void cauta_an();
int cautareavansata(int);
void ok(int);
main(){
f=fopen("reguli.in","r");
g=fopen("reguli.out","w");
citire();
diferente();
cauta_an();
return 0;
}
void citire(){
int i;
fscanf(f,"%d",&n);
x=(int*)malloc(n*sizeof(int));
a=(int*)malloc(n*sizeof(int));
for(i=0;i<n;++i){
fscanf(f,"%d",&x[i]);
}
fclose(f);
}
void diferente(){
int i;
for(i=1;i<n;++i){
a[i-1]=x[i]-x[i-1];
}
}
int first_i(){
int k;
for(k=1;k<n-1;++k){
if(a[k]!=a[0]){
return k;
}
}
return 0;
}
void cauta_an(){
int j;
const int i=0;
for(j=first_i();j<n-1;j++){
const int d=j-i+1;
if(i+d>n||j+d>n){
if(cautareavansata(j)){
ok(j);
}
continue;
}
if(a[i]==a[i+d]&&a[j]==a[j+d]){
ok(j);
}
}
}
void ok(int j){
int i;
fprintf(g,"%d\n",j+1);
for(i=0;i<=j;++i){
fprintf(g,"%d\n",a[i]);
}
fclose(g);
exit(0);
}
int cautareavansata(int j){
int i,k=0;
for(i=0;i<n;++i){
if(k>j){
k=0;
}
if(x[i] != x[i-1] + (i%k==0)?a[k]:a[i%k] ){
return 0;
}
}
return 1;
}