Pagini recente » Cod sursa (job #762654) | Cod sursa (job #1836986) | Cod sursa (job #2202759) | Cod sursa (job #2490756) | Cod sursa (job #148663)
Cod sursa(job #148663)
const MaxN=50000;
var a,cp,cn:array[0..MaxN] of longint;
semn:array[0..MaxN] of boolean;
i,j,k,l,m,n,poz,neg,ops:longint;
sum,s:int64;
begin
randomize;
assign(input,'semne.in'); reset(input);
assign(output,'semne.out'); rewrite(output);
readln(n,sum); s:=0;
for i:=1 to n do read(a[i]);
for i:=1 to n do
if random(2)=1 then
begin
inc(s,a[i]); inc(poz); cp[poz]:=i;
end
else
begin
dec(s,a[i]); inc(neg); cn[neg]:=i;
end;
for i:=1 to n do a[i]:=2*a[i];
while (s<>sum) do
if s<sum then
begin
k:=random(neg)+1; i:=cn[k]; //Iau un numar scazut
cn[k]:=cn[neg]; dec(neg); //si il adun
inc(poz); cp[poz]:=i;
inc(s,a[i]);
end
else
begin
k:=random(poz)+1; i:=cp[k]; //Aici fac inversul
cp[k]:=cp[poz]; dec(poz); //fac un numar cu plus sa fie cu minus
inc(neg); cn[neg]:=i;
dec(s,a[i]);
end;
for i:=1 to poz do semn[cp[i]]:=true;
for i:=1 to n do
if semn[i] then write('+')
else write('-');
close(input); close(output);
end.