Белорусские олимпиады (BY/GO)\Дипломный минимум\Придумать реализацию\10_GO - "Пробное задание" 96129
http://dl.gsu.by/task.jsp?nid=1122358&cid=620
+1 Долинский Михаил (100 / 100)
2014-08-27 12:44:44 100 / 100 Все тесты успешно пройдены 1.DPR DelTA3 at NIT5
2014-08-27 12:40:34 35 / 100 не пройден 8 тест (неверный ответ) 1.PPW DelTA3 at NIT5
Одно и то же решение в Delphi, проходит, в FP - нет
{$R-}
{
Read list S1 and list S2
Split both to 3d-array
Initialize [a1,b1] [a2,b2]
while not eolists
if Connected [a1,b1] & [a2,b2]
then merge->3
else less ->3
If eolist1 then AddList2
If eolist2 then AddList1
Print string from 3d-array[3]
}
Const
MaxN=50000;
var
a : array [1..3, 1..MaxN,1..2] of longint;
s1,s2 : string;
n1,n2,i, i1,i2,i3,
j1,j2,
a1,b1,a2,b2,a3,b3 : longint;
_ : integer;
One : boolean;
procedure Split(S:string; k:longint; var n:longint);
var
c1,c2 : string;
d,pz,pt : longint;
begin
delete(s,1,1);
d:=length(s);
s[d]:=',';
n:=0;
while (s<>'') and (d<>1) do
begin
inc(n);
pz:=pos(',',s);
c2:=copy(s,1,pz-1);
pt:=pos('.',c2);
if pt=0
then begin
val(c2,a[k,n,2],_);
a[k,n,1]:=a[k,n,2];
end
else begin
c1:=copy(c2,1,pt-1);
delete(c2,1,pt+1);
val(c1,a[k,n,1],_);
val(c2,a[k,n,2],_);
end;
delete(s,1,pz+1);
end;
end;
procedure PrintA(k,n:longint);
var
i : longint;
begin
for i:=1 to n do writeln(a[k,i,1],' ',a[k,i,2]);
end;
procedure PrintSA(k,n:longint);
var
i : longint;
begin
write('[');
for i:=1 to n do
begin
if a[k,i,1]=a[k,i,2]
then write(a[k,i,1])
else write(a[k,i,1],'..',a[k,i,2]);
if i=n
then writeln(']')
else write(', ');
end;
if n=0 then writeln(']');
end;
procedure Merge(a1,b1,a2,b2:longint; var a3,b3:longint);
begin
if a1<a2 then a3:=a1 else a3:=a2;
if b1>b2 then b3:=b1 else b3:=b2;
end;
function Connected(a1,b1,a2,b2 : longint) : boolean;
begin
Connected:= ((a2>=a1-1) and (a2<=b1+1)) or
((b2>=a1-1) and (b2<=b1+1)) or
((a1>=a2-1) and (a1<=b2+1)) or
((b1>=a2-1) and (b1<=b2+1));
end;
begin
assign(input,'input.txt'); reset(input);
assign(output,'output.txt'); rewrite(output);
readln(s1);
readln(s2);
if s1='[]' then writeln(s2) else
if s2='[]' then writeln(s1) else begin
Split(s1,1,n1);
Split(s2,2,n2);
i1:=1; i2:=1; i3:=0;
if a[1,1,1]<a[2,1,1]
then begin a1:=a[1,1,1]; b1:=a[1,1,2]; i1:=2 end
else begin a1:=a[2,1,1]; b1:=a[2,1,2]; i2:=2 end;
while (i1<=n1) or (i2<=n2) do
begin
if (i1<=n1) and ( (a[1,i1,1]<=a[2,i2,1]) or (i2>n2))
then begin a2:=a[1,i1,1]; b2:=a[1,i1,2]; inc(i1) end else
if (i2<=n2) and ( (a[2,i2,1]<a[1,i1,1]) or (i1>n1))
then begin a2:=a[2,i2,1]; b2:=a[2,i2,2]; inc(i2) end;
if Connected(a1,b1,a2,b2)
then begin
Merge(a1,b1,a2,b2,a3,b3);
a1:=a3; b1:=b3;
end
else begin
inc(i3);
a[3,i3,1]:=a1; a[3,i3,2]:=b1;
a1:=a2; b1:=b2;
end;
end;
inc(i3);
a[3,i3,1]:=a1; a[3,i3,2]:=b1;
PrintSA(3,i3); end; {else}
close(input); close(output);
end.