Pagini recente » Cod sursa (job #2308354) | Cod sursa (job #3257767) | Cod sursa (job #3278947) | Cod sursa (job #3294593) | Cod sursa (job #18632)
Cod sursa(job #18632)
{$q-,r-,s-,d-,i-}
const maxn=500*1000;zero=ord('0');baza=1000*1000*1000;
var t:Text;
V:array[0..maxn]of int64;
Sol:array[0..maxn]of longint;
p1,p2,i,j,n,lg,p:longint;s:string;
nr:array[0..2]of longint;
{var t1:longint;t2:longint absolute $0:$046c;}
begin
{ t1:=t2;}
assign(t,'reguli.in');reset(t);readln(t,n);
for i:=1 to N do
begin
readln(t,S);p:=1;lg:=0;fillchar(nr,sizeof(nr),0);
for j:=length(s) downto 1 do
begin
nr[lg]:=nr[lg]+p*(ord(s[j])-zero);
p:=p*10;if p=baza then begin p:=1;inc(lg);end;
end;
if nr[2]=0 then V[i]:=int64(nr[1])*baza+nr[0] else
V[i]:=(int64(nr[2])*baza+nr[1])*baza+nr[0];
end;close(T);
for i:=1 to N do begin Sol[i]:=i;V[i]:=V[i+1]-v[i];end;dec(n);
i:=2;
while i<=N do
begin
p1:=0;p2:=i-1;
while (V[p1+1]=V[p2+1])and(p1+1<i)and(p2<i*2)and(p2<N) do
begin
inc(p1);inc(p2);
if Sol[i-1]=p2-i+1 then
begin
Sol[p2]:=sol[i-1];break;
end else
if p2=N then
begin
{cauta intre p1+1si i-1 cel mai mic sol}
sol[n]:=Sol[i-1];
while sol[n]<(N-i+1) do inc(sol[n],sol[i-1]);
if sol[n]>n then sol[n]:=n;
end;
end;
if p2=i-1 then inc(i) else i:=p2+1;
end;
{ for i:=1 to N do writeln(V[i],' ',Sol[i]);}
{reguli.in}
assign(t,'reguli.out');rewrite(T);writeln(t,sol[N]);
for i:=1 to Sol[n] do writeln(t,v[i]);
close(t);
{ writeln((t2-t1)/18.2:0:6);}
end.