Pagini recente » Cod sursa (job #1286430) | Cod sursa (job #848693) | Cod sursa (job #3281246) | Cod sursa (job #1763677) | Cod sursa (job #18543)
Cod sursa(job #18543)
program reg;
type pt=array[0..21] of integer;
var a:array[1..499999] of array[0..21] of integer;
k:pt;
s1,s2,c,n2,n3:string;
f:text;
cod,minte,ii:integer;
i,n,t,j:longint;
q:boolean;
procedure chg(s:string;var aux:pt);
begin
if s[1]<>'-' then begin for j:=length(s) downto 1 do
val(s[j],aux[21-length(s)+j],cod);
aux[0]:=21-length(s)+1;
end
else begin for j:=length(s) downto 2 do
val(s[j],aux[21-length(s)+j],cod);
aux[21-length(s)+2]:=-aux[21-length(s)+2];
aux[0]:=21-length(s)+2;
end;
end;
function mare(aux1,aux2:pt):boolean;
begin
if aux2[0]<aux1[0] then mare:=true
else if aux2[0]=aux1[0] then begin
j:=aux1[0]-1;
repeat
inc(j);
until (j>21)or(aux2[j]<aux1[j]) or (aux2[j]>aux1[j]);
if (j>21) or (aux2[j]>aux1[j]) then mare:=true
else mare:=false;
end;
end;
procedure dez;
begin
repeat
inc(j);
until k[j]<>0;
j:=j-1;
end;
procedure sca(aux1,aux2:pt);
begin
if mare(aux1,aux2) then begin
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte-aux1[j];
minte:=0;
if ii<0 then begin
ii:=ii+10;
minte:=-1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;k[0]:=j+1;
end
else begin
k:=aux1;
aux1:=aux2;
aux2:=k;
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte-aux1[j];
minte:=0;
if ii<0 then begin
ii:=ii+10;
minte:=-1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;
k[0]:=j+1;
k[k[0]]:=-k[k[0]];
end;
end;
procedure sa(aux1,aux2:pt);
begin
aux1[aux1[0]]:=-aux1[aux1[0]];
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte+aux1[j];
minte:=0;
if ii>10 then begin
ii:=ii-10;
minte:=1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;
k[0]:=j+1;
end;
procedure aa(aux1,aux2:pt);
begin
aux2[aux2[0]]:=-aux2[aux2[0]];
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte+aux1[j];
minte:=0;
if ii>10 then begin
ii:=ii-10;
minte:=1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;
k[0]:=j+1;
k[k[0]]:=-k[k[0]];
end;
procedure ss(aux1,aux2:pt);
begin
aux1[aux1[0]]:=-aux1[aux1[0]];
aux2[aux2[0]]:=-aux2[aux2[0]];
if not mare(aux1,aux2) then begin
k:=aux1;
aux1:=aux2;
aux2:=k;
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte-aux1[j];
minte:=0;
if ii<0 then begin
ii:=ii+10;
minte:=-1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;k[0]:=j+1;
end
else begin
j:=21;
minte:=0;
repeat
ii:=aux2[j]+minte-aux1[j];
minte:=0;
if ii<0 then begin
ii:=ii+10;
minte:=-1;
end;
k[j]:=ii;
dec(j);
until (j<aux2[0]) and (j<aux1[0]);
if minte<>0 then begin
dec(j);
k[j+1]:=minte;
end;
dez;k[0]:=j+1;
k[k[0]]:=-k[k[0]];
end;
end;
function eg(x,y:integer):boolean;
begin
ii:=-1;
repeat
inc(ii);
until (ii>21) or (a[x][ii]<>a[y][ii]);
if ii>21 then eg:=true
else eg:=false;
end;
procedure dif(aux1,aux2:pt);
begin
if aux2[aux2[0]]<0 then if aux1[aux1[0]]<0 then ss(aux1,aux2)
else aa(aux1,aux2)
else if aux1[aux1[0]]<0 then sa(aux1,aux2)
else sca(aux1,aux2);
a[i-1]:=k;
if i-1<>1 then if (eg(i-1,1)) and (q=false) then begin
q:=true;
t:=i-2;
end;
if q=true then if (eg(i-1,i-1-t)) then q:=true
else q:=false;
end;
procedure cit;
var aux1,aux2:pt;
begin
assign(f,'reguli.in');
reset(f);
readln(f,n);
readln(f,s1);
fillchar(aux1,sizeof(aux1),0);
chg(s1,aux1);
q:=false;
t:=0;
for i:=2 to n do
begin
readln(f,s2);
fillchar(aux2,sizeof(aux2),0);
fillchar(k,sizeof(k),0);
chg(s2,aux2);
dif(aux1,aux2);
aux1:=aux2;
end;
if q=false then t:=n-1;
close(f);
end;
procedure scris;
begin
assign(f,'reguli.out');
rewrite(f);
writeln(f,t);
for i:=1 to t do
begin
for j:=a[i][0] to 21 do
write(f,a[i][j]);
writeln(f);
end;
close(f);
end;
begin
cit;
scris;
end.