Cod sursa(job #44591)

Utilizator Bluedrop_demonPandia Gheorghe Bluedrop_demon Data 31 martie 2007 16:03:15
Problema Regiuni Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.82 kb
{
    Problema regiuni
}

Program regiuni;

Type elm = record
            x, y : Integer;
           end;

Var n, m, i, j, k, kf, a, b, c, st, dr, nrg : Integer;
    l, v : array[1..1000] of elm;
    grup : array[1..1000,1..2] of Integer;
    mm, nn : real;
    vert, cod : boolean;

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

    For i := 1 to n do
        Begin
            Readln( a, b, c );
            if b = 0 then
                Begin
                    vert := true;
                    mm := 0;
                    nn := -c/a;
                End
                else
                Begin
                    vert := false;
                    mm := -a/b;
                    nn := -c/b;
                End;
            kf := nrg;
            For j := 1 to kf do
                Begin
                    st := grup[j,1]-1;
                    dr := grup[j,2]+1;
                    For k := grup[j,1] to grup[j,2] do
                        Begin
                            Case vert of
                                true: if l[k].x > nn then cod := true
                                                     else cod := false;
                                false: if l[k].y < mm*l[k].x + nn then cod := true
                                                                  else cod := false;
                            End;
                            If cod = true then
                                        Begin
                                            st := st+1;
                                            v[st] := l[k];
                                        End
                                        else
                                        Begin
                                            dr := dr-1;
                                            v[dr] := l[k];
                                        End;
                        End;
                        If ( st <> grup[j,1]-1 ) and ( dr <> grup[j,2]+1 ) then
                            Begin
                                For k := grup[j,1] to grup[j,2] do
                                    l[k] := v[k];
                                nrg := nrg+1;
                                grup[nrg,1] := dr;
                                grup[nrg,2] := grup[j,2];
                                grup[j,2] := st;
                            End;
                End;
        End;
    Close( input );

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

End.