Cod sursa(job #771177)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 25 iulie 2012 00:41:27
Problema Semne Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
Program semne;
type tip=record
      v,poz:longint;
      end;
 var a,sol:array [0..50005] of longint;
     plus,minus:array [0..50005] of tip;
     i,n,p,m,aux:longint;
     sc,s:int64;
     fi,fo:text;
begin
 assign(fi,'semne.in');
  assign(fo,'semne.out');
 reset(fi); rewrite(fo); readln(fi,n,s); sc:=0;
  for i:=1 to n do begin
                    read(fi,a[i]);
                    aux:=random(2);
                    if aux=0 then begin inc(m); sc:=sc-a[i]; minus[m].v:=a[i]; minus[m].poz:=i; end
                                else begin inc(p); sc:=sc+a[i]; plus[p].v:=a[i]; plus[p].poz:=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].v;
                  minus[aux]:=minus[m]; dec(m);
                  end
    else if sc>s then begin
          aux:=random(p)+1;
          inc(m); minus[m]:=plus[aux];
          sc:=sc-2*plus[aux].v;
          plus[aux]:=plus[p]; dec(p);
         end;
  for i:=1 to m do sol[minus[i].poz]:=1;
   for i:=1 to n do
    if sol[i]=1 then write(fo,'-') else write(fo,'+');
  close(fo);
end.