Pagini recente » Cod sursa (job #1260252) | Cod sursa (job #2046362) | Cod sursa (job #1075925) | Cod sursa (job #131592) | Cod sursa (job #78819)
Cod sursa(job #78819)
program reguli;
const
fin='reguli.in';
fout='reguli.out';
var
a:array[1..500100] of int64;
pi:array[1..500100] of longint;
d,q,i,c,r,j,k,n:longint;
t:array[0..1] of int64;
old,new:longint;
x,y:int64;
s:string;
ok:array[1..500100] of boolean;
begin
assign(input,fin);
reset(input);
readln(n);
for i:=1 to n do
begin
readln(s);
k:=1;
if s[1]='-' then
k:=2;
for j:=k to length(s) do
a[i]:=a[i]*10+(ord(s[j])-48);
if k=2 then
a[i]:=a[i]*(-1);
end;
for i:=1 to n-1 do
a[i]:=a[i+1]-a[i];
dec(n);
assign(output,fout);
rewrite(output);
k:=0;
pi[1]:=0;
for q:=2 to n do
begin
while (k>0) and (a[k+1]<>a[q]) do
k:=pi[k];
if a[k+1]=a[q] then
inc(k);
pi[q]:=k;
end;
k:=n;
while k>0 do
begin
ok[pi[k]]:=true;
k:=pi[k];
end;
for d:=1 to n do
begin
c:=n div d;
r:=n-c*d;
if ok[r] then
begin
x:=n-r-pi[n-r];
y:=(n-r) div x;
if (x<>0) then
if (y=(n-r)/x)and(y=c) then
begin
writeln(d);
for i:=1 to d do
writeln(a[i]);
break;
end;
end;
end;
close(output);
end.