Cod sursa(job #40203)

Utilizator bigsarpeadrian bigsarpe Data 27 martie 2007 11:56:10
Problema Regiuni Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
{$q-,r-,s-,d-,i-}
const maxn=1006;
var t:Text;
   Px,Py,A,B,C,grad,Grad2,O,O2:array[0..maxn]of integer;
   return,aux,dreapta,grup,lg,lg2,i,n,m:longint;
   cele0,cele1:boolean;
   procedure semn(dreapta,punct:integer);
   begin
      aux:=A[dreapta]*Px[punct]+B[dreapta]*Py[punct]+C[dreapta];
      if aux>0 then return:=+1 else if aux<0 then return:=-1 else return:=0;
   end;
begin
   assign(T,'regiuni.in');reset(T);readln(T,m,n);
   for i:=1 to m do readln(t,A[i],B[i],C[i]);
   for i:=1 to N do begin O[i]:=i;readln(t,Px[i],Py[i]);end;close(T);
   lg:=1;Grad[0]:=0;Grad[1]:=N;
   for dreapta:=1 to M do
   begin
      lg2:=0;fillchar(grad2,sizeof(grad2),0);o2:=grad2;
      for grup:=1 to lg do
      begin
         inc(lg2);grad2[lg2]:=grad2[lg2-1];Grad2[lg2+1]:=Grad[grup];
         cele0:=false;cele1:=false;
         for i:=grad[grup-1]+1 to grad[grup] do
         begin
            semn(dreapta,O[i]);
            if return<0 then
            begin
               cele0:=true;inc(grad2[lg2]);O2[grad2[lg2]]:=O[i];
            end else
            begin
               cele1:=true;O2[grad2[lg2+1]]:=O[i];dec(grad2[lg2+1]);
            end;
         end;
         if cele1 and cele0 then inc(lg2);
         Grad2[lg2]:=Grad[grup];
      end;
      lg:=lg2;Grad:=grad2;O:=o2;
   end;
   assign(t,'regiuni.out');rewrite(t);writeln(t,lg);close(T);
end.