Cod sursa(job #44536)
Utilizator | Data | 31 martie 2007 15:12:56 | |
---|---|---|---|
Problema | Regiuni | Scor | 10 |
Compilator | fpc | Status | done |
Runda | Arhiva de probleme | Marime | 3.43 kb |
{
Problema regiuni
}
Program regiuni;
Type ref = ^elm;
elm = record
x, y : Integer;
adr : ref;
end;
Var n, m, i, j, k, kf, a, b, c : Integer;
l : array[1..1000] of ref;
e, f, g : ref;
mm, nn : real;
vert, cod, codp : boolean;
Begin
Assign( input, 'regiuni.in' );
Reset( input );
Readln( n, m );
For i := 1 to n do
Readln( a, b, c );
k := 1;
l[k] := nil;
For i := 1 to m do
Begin
new( e );
Readln( e^.x, e^.y );
e^.adr := l[k];
l[k] := e;
End;
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 := k;
For j := 1 to kf do
Begin
k := k+1;
l[k] := nil;
e := l[j];
Case vert of
true: if e^.x > nn then codp := true
else codp := false;
false: if e^.y < mm*e^.x + nn then codp := true
else codp := false;
End;
g := e;
e := e^.adr;
while e <> nil do
Begin
Case vert of
true: if e^.x > nn then cod := true
else cod := false;
false: if e^.y < mm*e^.x + nn then cod := true
else cod := false;
End;
If cod <> codp then
Begin
new( f );
f^.x := e^.x;
f^.y := e^.y;
f^.adr := l[k];
l[k] := f;
g^.adr := e^.adr;
dispose( e );
e := g^.adr;
End
else
Begin
g := e;
e := e^.adr;
End;
End;
if l[k] = nil then Begin k := k-1; dispose(l[k+1]); End;
End;
End;
Close( input );
Assign( output, 'regiuni.out' );
Rewrite( output );
Writeln( k );
Close( output );
For i := 1 to k do
While l[i] <> nil do
Begin
e := l[i];
l[i] := l[i]^.adr;
dispose( e );
End;
End.