Pagini recente » Cod sursa (job #907354) | Cod sursa (job #1156411) | Cod sursa (job #2060703) | Cod sursa (job #2190037) | Cod sursa (job #479437)
Cod sursa(job #479437)
#include<stdio.h>
#include<string.h>
long *a, *p, n;
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 solve(){
for(long i=1; i<n; i++)
a[i-1] = a[i] - a[i-1];
--n;
prefix();
long 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;
}