Pagini recente » Cod sursa (job #3171960) | Cod sursa (job #1662902) | Cod sursa (job #3297822) | Cod sursa (job #2360256) | Cod sursa (job #771165)
Cod sursa(job #771165)
Program semne;
var a,plus,minus,sol:array [1..50000] of longint;
i,n,sc,s,p,m,aux,pos:longint;
ok:boolean;
fi,fo:text;
procedure cauta(val:longint);
var l,r,mid:longint;
begin
pos:=-1; l:=1; r:=n;
while (pos=-1) and (l<=r) do begin
mid:=(l+r) div 2;
if a[mid]>val then r:=mid-1
else if a[mid]<val then l:=mid+1
else pos:=mid;
end;
end;
begin
assign(fi,'semne.in');
assign(fo,'semne.out');
reset(fi); rewrite(fo); readln(fi,n,s);
for i:=1 to n do begin
read(fi,a[i]);
aux:=random(1);
if aux=0 then begin inc(m); sc:=sc-a[i]; minus[m]:=a[i]; end
else begin inc(p); sc:=sc+a[i]; plus[p]:=a[i]; end;
end;
while sc<>s do
if sc<s then begin
aux:=random(m)+1;
inc(p); plus[p]:=minus[aux];
sc:=sc+2*minus[aux];
minus[aux]:=minus[m]; dec(m);
end
else begin
aux:=random(p)+1;
inc(m); minus[m]:=plus[aux];
sc:=sc-2*plus[aux];
plus[aux]:=plus[p]; dec(p);
end;
for i:=1 to p do begin cauta(plus[i]); sol[pos]:=1; end;
for i:=1 to n do
if sol[i]=0 then write(fo,'-') else write(fo,'+');
close(fo);
end.