Pagini recente » Cod sursa (job #2362492) | Cod sursa (job #1462255) | Cod sursa (job #1093370) | Cod sursa (job #3218554) | Cod sursa (job #3836)
Cod sursa(job #3836)
type vector=array[0..50000]of longint;
var i,j,n,s,sum,e,i1,i2:longint;
v,plus,minus:vector;
gasit:boolean;
procedure qsort(ls,ld:longint;var v:vector);
var i,j,aux:longint;
begin
i:=ls;j:=ld;
while true do begin
while (v[i]<=v[j])and(i<>j) do inc(i);
if i=j then break;
aux:=v[i];v[i]:=v[j];v[j]:=aux;dec(j);
while (v[i]<=v[j])and(i<>j) do dec(j);
if i=j then break;
aux:=v[i];v[i]:=v[j];v[j]:=aux;inc(i);
end;
if j-1>ls then qsort(ls,j-1,v);
if j+1<ld then qsort(j+1,ld,v);
end;
{function gasit(n,st,dr:longint;var v:vector):boolean;
var m:longint;
begin
gasit:=false;
if st>dr then
exit;
m:=(st+dr) div 2;
if n=v[m] then
begin
gasit:=true;
v[m]:=-1;
exit;
end;
if n<v[m] then
gasit:=gasit(n,st,m-1,v)
else
gasit:=gasit(n,m+1,dr,v);
end;}
begin
randomize;
assign(input,'semne.in');reset(input);
assign(output,'semne.out');rewrite(output);
readln(n,s);
sum:=0;
plus[0]:=n;
for i:=1 to n do
begin
read(v[i]);
plus[i]:=v[i];
sum:=sum+v[i];
end;
while sum<>s do
begin
if sum<s then
begin
e:=random(minus[0])+1;
sum:=sum+2*minus[e];
inc(plus[0]);
plus[plus[0]]:=minus[e];
minus[e]:=minus[minus[0]];
dec(minus[0]);
end;
if sum>s then
begin
e:=random(plus[0])+1;
sum:=sum-2*plus[e];
inc(minus[0]);
minus[minus[0]]:=plus[e];
plus[e]:=plus[plus[0]];
dec(plus[0]);
end;
end;
qsort(1,plus[0],plus);
qsort(1,minus[0],minus);
i1:=1;
i2:=1;
while (i1<=plus[0])and(i2<=minus[0]) do
begin
while (plus[i1]<=minus[i2])and(i1<=plus[0]) do
begin
write('+');
inc(i1);
end;
while (plus[i1]>minus[i2])and(i2<=minus[0]) do
begin
write('-');
inc(i2);
end;
end;
for i:=i1 to plus[0] do
write('+');
for i:=i2 to minus[0] do
write('-');
{for i:=1 to n do
begin
gasit:=false;
for j:=1 to plus[0] do
if v[i]=plus[j] then
begin
gasit:=true;
plus[j]:=-1;
break;
end;
if gasit then
write('+')
else
write('-');
end;}
close(input);close(output);
end.