Pagini recente » Cod sursa (job #1667925) | Cod sursa (job #112302) | Cod sursa (job #1332382) | Cod sursa (job #3295057) | Cod sursa (job #479432)
Cod sursa(job #479432)
#include<stdio.h>
#include<string.h>
long *a, *p, n, length = 0;
void prefix(){
long k = -1;
p[0] = -1;
for(long i=1; i<n; i++) {
while(k >= 0 && a[i] != a[k+1])
k = p[k];
if(a[k+1] == a[i]) ++k;
p[i] = k;
}
}
void match(long l){
}
void solve(){
for(long i=1; i<n; i++)
a[i-1] = a[i] - a[i-1];
--n;
prefix();
int ant = p[n-1];
if(ant == 0) {
--n;
return;
}
if(ant == -1) return;
for(--n; --n >=0 && p[n] < ant && p[n] != 0; ant = p[n]);
}
void read(){
FILE *ifile;
ifile = fopen("reguli.in", "r");
fscanf(ifile, "%li", &n);
a = new long[n];
p = new long[n-1];
for(long i=0; i<n; i++)
fscanf(ifile, "%li", &a[i]);
fclose(ifile);
}
void write(){
FILE *ofile;
ofile = fopen("reguli.out", "w");
fprintf(ofile, "%li\n", n);
for(int i=0; i<n; i++)
fprintf(ofile, "%li\n", a[i]);
fclose(ofile);
}
int main()
{
read();
solve();
write();
return 0;
}