Cod sursa(job #148663)

Utilizator goguGogu Marian gogu Data 4 martie 2008 17:52:39
Problema Semne Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.16 kb
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.