Pagini recente » Cod sursa (job #176288) | Cod sursa (job #14843) | Cod sursa (job #3251089) | Cod sursa (job #3224223) | Cod sursa (job #18077)
Cod sursa(job #18077)
var fi,fo:text;
poz1,poz2,j,aux,poz,i,n,nr:longint;
v:array[1..50000]of longint;
s,sum,vec:int64;
plus:array[1..50000]of boolean;
inv:boolean;
procedure try(poz:longint);
begin
if plus[poz]then
if(sum>s)and(abs(sum-s)>abs(sum-2*v[poz]-s)) then
begin
plus[poz]:=false;
dec(sum,2*v[poz]);
end
else begin end
else if(sum<s)and(abs(sum-s)>abs(sum+2*v[poz]-s)) then
begin
plus[poz]:=true;
inc(sum,2*v[poz]);
end;
end;
procedure clear;
begin
sum:=0;
for i:=1 to n do
if random(2)=1 then
begin
inc(sum,v[i]); plus[i]:=true;
end
else begin
dec(sum,v[i]); plus[i]:=false;
end;
end;
procedure try2(poz1,poz2:longint);
begin
try(poz1);
if poz1<>poz2 then
if plus[poz1]=plus[poz2]then
begin end
else begin
if plus[poz2]then
begin aux:=poz1; poz1:=poz2; poz2:=aux; end;
if abs(sum-s)>abs(sum+2*v[poz2]-2*v[poz1]-s)then
begin
sum:=sum+2*v[poz2]-2*v[poz1];
plus[poz1]:=false;
plus[poz2]:=true;
end;
end;
end;
begin
randomize;
assign(fi,'semne.in'); reset(fi);
assign(fo,'semne.out'); rewrite(fo);
readln(fi,n,s);
if s<0 then
begin s:=-s; inv:=true; end
else inv:=false;
for i:=1 to n do read(fi,v[i]);
{sum:=0;
for i:=1 to n do inc(sum,v[i]);}
{xx:=(sum+s)div 2;}
fillchar(plus,sizeof(plus),true);
{while sum<>s do
begin
poz:=random(n)+1;
end;}
vec:=abs(sum-s);
clear;
while sum<>s do
begin
if abs(sum-s)=vec then
begin
inc(nr);
if nr>1 then clear;
{readln;}
end
else begin
vec:=abs(sum-s);
nr:=0;
end;
{poz1:=random(n-1)+1;}
{poz2:=random(n)+1;}
{if random(10)=4 then}
for j:=n-1 downto 1 do
begin
poz1:=j;
poz2:=poz1+1;
for i:=1 to 5 do
begin
if poz2<>n then
if random(2)=1 then inc(poz2);
end;
try2(poz1,poz2);
poz2:=random(n)+1;
try2(poz2,poz1);
end;
end;
for i:=1 to n do
if(plus[i]and not inv)or(not plus[i]and inv)then
write(fo,'+')
else write(fo,'-');
writeln(fo);
close(fo);
end.