Cod sursa(job #41753)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 28 martie 2007 15:50:58
Problema Regiuni Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.1 kb
{
    Problema regiuni
}

Program regiuni;

Type dreapta = record
                a, b, c : Longint;
               end;
     elm = record
            x, y : Longint;
           end;
     vector = array[1..1000] of elm;

Var n, m, i, grf : Longint;
    d : array[1..1000] of dreapta;
    v, vv : vector;

Procedure dei( st, dr, i : Integer );
Var vert, cod : boolean;
    mm, nn : real;
    ki, kf, j : Integer;
Begin
    If ( i > n ) or ( st = dr ) then exit;
    If d[i].b = 0 then
        Begin
            vert := true;
            mm := 0;
            nn := -d[i].c/d[i].a;
        End
        else
        Begin
            vert := false;
            mm := -d[i].a/d[i].b;
            nn := -d[i].c/d[i].b;
        End;
        ki := st-1;
        kf := dr+1;
        For j := st to dr do
            Begin
                Case vert of
                    true: if v[j].x > nn then cod := true
                                          else cod := false;
                    false: if v[j].y < mm*v[j].x + nn then cod := true
                                                       else cod := false;
                End;
                If cod then
                    Begin
                        ki := ki+1;
                        vv[ki] := v[j];
                    End
                    else
                    Begin
                        kf := kf-1;
                        vv[kf] := v[j];
                    End;
            End;
    if ( ki <> st-1  ) and ( kf <> dr+1 ) then
        Begin
            grf := grf+1;
            For j := st to dr do
                v[j] := vv[j];
        End;
    dei( st, ki, i+1 );
    dei( kf, dr, i+1 );
End;

Begin
    Assign( input, 'regiuni.in' );
    Reset( input );
        Readln( n, m );
        For i := 1 to n do
            Readln( d[i].a, d[i].b, d[i].c );
        For i := 1 to m do
                Readln( v[i].x, v[i].y );
    Close( input );

    grf := 1;
    dei( 1, m, 1 );

    Assign( output, 'regiuni.out' );
    Rewrite( output );
        Writeln( grf );
    Close( output );

End.