Cod sursa(job #67785)
Utilizator | Data | 25 iunie 2007 14:06:08 | |
---|---|---|---|
Problema | Sarpe | Scor | 80 |
Compilator | fpc | Status | done |
Runda | preONI 2007, Runda Finala, Clasa a 9-a si gimnaziu | Marime | 4.24 kb |
program sarpe;
type vector=array[0..1002] of integer;
var f,g:text;
m,va,vb,vc:vector;
i:longint;
procedure iofile;
var c:char;
i,aux:integer;
begin
assign(f,'sarpe.in');
reset(f);
assign(g,'sarpe.out');
rewrite(g);
m[0]:=0;
while not eoln(f) do
begin
read(f,c);
if c in ['0'..'9'] then
begin
inc(m[0]);
m[m[0]]:=ord(c)-ord('0');
end;
end;
for i:=1 to m[0] div 2 do
begin
aux:=m[i];
m[i]:=m[m[0]-i+1];
m[m[0]-i+1]:=aux;
end;
if (m[0]=1)and(m[1]=1) then
begin
writeln(g,'2');
close(g);
halt;
end;
close(f);
end;
procedure inmultire(var v:vector;c:byte);
var t,x,i:longint;
begin
t:=0;
for i:=1 to v[0] do
begin
x:=v[i]*c+t;
v[i]:=x mod 10;
t:=x div 10;
end;
while t<>0 do
begin
inc(v[0]);
v[v[0]]:=t mod 10;
t:=t div 10;
end;
end;
procedure deplasare(var v:vector;k:integer);
var i:longint;
begin
for i:=v[0] downto 1 do
v[i+k]:=v[i];
for i:=1 to k do
v[i]:=0;
v[0]:=v[0]+k;
end;
procedure suma(var a,b:vector);
var x,i,t:longint;
begin
t:=0;
i:=1;
while (i<=a[0])and(i<=b[0]) do
begin
x:=a[i]+b[i]+t;
a[i]:=x mod 10;
t:=x div 10;
inc(i);
end;
if i<=a[0] then
while i<=a[0] do
begin
x:=a[i]+t;
a[i]:=x mod 10;
t:=x div 10;
inc(i);
end else
while i<=b[0] do
begin
x:=b[i]+t;
a[i]:=x mod 10;
t:=x div 10;
inc(i);
end;
a[0]:=i-1;
if t<>0 then
begin
inc(a[0]);
a[a[0]]:=t;
end;
end;
procedure inmultire_v(var a,b:vector);
var i:longint;
vs,v:vector;
begin
vs[0]:=1;
vs[1]:=0;
for i:=1 to b[0] do
begin
v:=a;
inmultire(v,b[i]);
deplasare(v,i-1);
suma(vs,v);
end;
a:=vs;
end;
procedure scad_1(var v:vector);
var i:longint;
begin
i:=1;
while v[i]=0 do
begin
v[i]:=9;
inc(i);
end;
v[i]:=v[i]-1;
if v[v[0]]=0 then dec(v[0]);
end;
procedure scad_2(var v:vector);
var i,x,t:longint;
begin
i:=1;
x:=v[1]+10-2;
v[1]:=x mod 10;
t:=x div 10;
for i:=2 to v[0]-1 do
begin
x:=9+v[i]+t;
v[i]:=x mod 10;
t:= x div 10;
end;
v[v[0]]:=v[v[0]]-1+t;
if v[v[0]]=0 then v[0]:=v[0]-1;
end;
begin
iofile;
va:=m;
scad_1(va);
vb:=m;
scad_2(vb);
inmultire_v(va,vb);
vc[0]:=1;
vc[1]:=2;
inmultire_v(va,vc);
vc[0]:=1;
vc[1]:=4;
inmultire_v(m,vc);
suma(va,m);
for i:=va[0] downto 1 do
write(g,va[i]);
writeln(g);
close(g);
end.