Cod sursa(job #44237)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 30 martie 2007 23:56:11
Problema Regiuni Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.41 kb
{
    Problema regiuni
}

Program regiuni;

Const Max = 1000;

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

Var n, m, i, grf : Longint;
    d : array[1..Max] of dreapta;
    v : array[1..Max] of vector;
    l : array[1..Max] of Integer;
    vert, cod : boolean;
    mm, nn : real;
    ki, kf, k, j : Integer;


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 );
        l[1] := m;
        For i := 1 to m do
            Begin
                Readln( v[1][i].x, v[1][i].y );
                v[1,i].e := true;
            End;
    Close( input );

    ki := 1;
    grf := 1;
    For i := 1 to n do
        Begin
    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;

        kf := ki;
        For k := 1 to ki do
        Begin
        kf := kf +1;
        l[kf] := 0;
        For j := 1 to l[k] do
            Begin
                Case vert of
                    true: if v[k][j].x > nn then cod := true
                                            else cod := false;
                    false: if v[k][j].y < mm*v[k][j].x + nn then cod := true
                                                            else cod := false;
                End;
                If cod then
                    Begin
                        l[kf] := l[kf]+1;
                        v[kf][l[kf]] := v[k][j];
                        v[k][j].e := false;
                    End;
            End;
        End;
        if l[kf] = 0 then kf := kf-1;
        ki := kf;
        End;

    grf := 0;
    For i := 1 to kf do
        Begin
            cod := false;
            For j := 1 to l[i] do
                if v[i,j].e then
                    Begin
                        cod := true;
                        break;
                    End;
            if cod then grf := grf +1;
        End;

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

End.