Pagini recente » Cod sursa (job #1394940) | Cod sursa (job #2951290) | Cod sursa (job #396984) | Cod sursa (job #38831) | Cod sursa (job #183583)
Cod sursa(job #183583)
program operatii;
type nr=0..100000;
type vector=array[0..20] of byte;
var a: array[1..1000000] of longint;
sv: vector;
n,i,ip,s,op,min,k: longint;
g: boolean;
f: text;
procedure adunare;
var j,t: integer;
v: vector;
d: longint;
begin
d:=a[i]; v[0]:=0;
while d>0 do
begin
inc(v[0]);
v[v[0]]:=d mod 10;
d:=d div 10;
end;
t:=0; j:=1;
while (j<=sv[0]) or (j<=v[0]) or (t>0) do
begin
t:=t+sv[j]+v[j];
sv[j]:=t mod 10;
t:=t div 10;
inc(j);
end;
sv[0]:=j-1;
end;
procedure scadere;
var i,t: integer;
v: vector;
d: longint;
begin
d:=min; v[0]:=0;
while d>0 do
begin
inc(v[0]);
v[v[0]]:=d mod 10;
d:=d div 10;
end;
t:=0; i:=1;
while (i<=sv[0]) or (t>0) do
begin
sv[i]:=sv[i]-v[i]-t;
if sv[i]<0 then t:=1
else t:=0;
sv[i]:=sv[i]+t*10;
inc(i);
end;
while (sv[0]>0) and (sv[sv[0]]=0) do
dec(sv[0]);
end;
begin
assign(f,'operatii.in');
reset(f);
read(f,n); g:=true;
for i:=1 to n do
begin
read(f,a[i]);
if (maxlongint-a[i]>=s) and (g=true) then s:=s+a[i]
else
if g=false then adunare
else
begin
g:=false;
while s>0 do
begin
inc(sv[0]);
sv[sv[0]]:=s mod 10;
s:=s div 10;
end;
adunare;
end;
end;
close(f);
if g=true then
while s>0 do
begin
for i:=1 to n do
if a[i]<>0 then
begin
ip:=i; min:=a[i];
while a[ip+1]<>0 do
begin
inc(ip);
if a[ip]<min then min:=a[ip];
end;
for k:=i to ip do
begin
a[k]:=a[k]-min;
s:=s-min;
end;
op:=op+min;
i:=ip;
end;
end;
if g=false then
while sv[0]>0 do
begin
for i:=1 to n do
if a[i]<>0 then
begin
ip:=i; min:=a[i];
while a[ip+1]<>0 do
begin
inc(ip);
if a[ip]<min then min:=a[ip];
end;
for k:=i to ip do
begin
a[k]:=a[k]-min;
scadere;
end;
op:=op+min;
i:=ip;
end;
end;
assign(f,'operatii.out');
rewrite(f);
write(f,op);
close(f);
end.