import java.util.*;
import java.lang.*;
class Main
{
static class PointF {
public float x;
public float y;
public PointF(float x, float y) {this.x=x; this.y=y;}
}
private static PointF sub(PointF a, PointF b) {
return new PointF(a.x-b.x, a.y-b.y);
}
private static float getPerpDotProduct(final PointF p1, final PointF p2) {
return p1.x * p2.y - p1.y * p2.x;
}
private static boolean isInside(PointF a, PointF b, PointF c, PointF p) {
final float c1 = getPerpDotProduct(sub(a,b), sub(a,p));
final float c2 = getPerpDotProduct(sub(b,c), sub(b,p));
final float c3 = getPerpDotProduct(sub(c,a), sub(c,p));
return ((c1 >= 0 && c2 >= 0 & c3 >= 0) || (c1 <= 0 && c2 <= 0 && c3 <= 0));
}
{
PointF a = new PointF(10, 1);
PointF b = new PointF(1, 10);
PointF c = new PointF(2, 2);
PointF p1 = new PointF(3, 3);
PointF p2 = new PointF(0, 0);
System.
out.
println(isInside
(a,b,c,p1
)); System.
out.
println(isInside
(a,b,c,p2
)); }
}
aW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CgpjbGFzcyBNYWluCnsKICAgIHN0YXRpYyBjbGFzcyBQb2ludEYgewogICAgICAgIHB1YmxpYyBmbG9hdCB4OwogICAgICAgIHB1YmxpYyBmbG9hdCB5OwogICAgICAgIHB1YmxpYyBQb2ludEYoZmxvYXQgeCwgZmxvYXQgeSkge3RoaXMueD14OyB0aGlzLnk9eTt9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgUG9pbnRGIHN1YihQb2ludEYgYSwgUG9pbnRGIGIpIHsKICAgICAgICByZXR1cm4gbmV3IFBvaW50RihhLngtYi54LCBhLnktYi55KTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmbG9hdCBnZXRQZXJwRG90UHJvZHVjdChmaW5hbCBQb2ludEYgcDEsIGZpbmFsIFBvaW50RiBwMikgewogICAgICAgIHJldHVybiBwMS54ICogcDIueSAtIHAxLnkgKiBwMi54OwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGJvb2xlYW4gaXNJbnNpZGUoUG9pbnRGIGEsIFBvaW50RiBiLCBQb2ludEYgYywgUG9pbnRGIHApIHsgCiAgICAgICAgZmluYWwgZmxvYXQgYzEgPSBnZXRQZXJwRG90UHJvZHVjdChzdWIoYSxiKSwgc3ViKGEscCkpOwogICAgICAgIGZpbmFsIGZsb2F0IGMyID0gZ2V0UGVycERvdFByb2R1Y3Qoc3ViKGIsYyksIHN1YihiLHApKTsKICAgICAgICBmaW5hbCBmbG9hdCBjMyA9IGdldFBlcnBEb3RQcm9kdWN0KHN1YihjLGEpLCBzdWIoYyxwKSk7CiAgICAgICAgcmV0dXJuICgoYzEgPj0gMCAmJiBjMiA+PSAwICYgYzMgPj0gMCkgfHwgKGMxIDw9IDAgJiYgYzIgPD0gMCAmJiBjMyA8PSAwKSk7CiAgICB9CiAgICAKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewogICAgUG9pbnRGIGEgPSBuZXcgUG9pbnRGKDEwLCAxKTsKICAgIFBvaW50RiBiID0gbmV3IFBvaW50RigxLCAxMCk7CiAgICBQb2ludEYgYyA9IG5ldyBQb2ludEYoMiwgMik7CiAgICBQb2ludEYgcDEgPSBuZXcgUG9pbnRGKDMsIDMpOwogICAgUG9pbnRGIHAyID0gbmV3IFBvaW50RigwLCAwKTsKICAgIFN5c3RlbS5vdXQucHJpbnRsbihpc0luc2lkZShhLGIsYyxwMSkpOyAgICAgICAgICAgIAogICAgU3lzdGVtLm91dC5wcmludGxuKGlzSW5zaWRlKGEsYixjLHAyKSk7ICAgICAgICAgICAgCgl9Cn0=