Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

A Point in a Triangle

There is a triangle formed by three points $(x_1, y_1)$, $(x_2, y_2)$, $(x_3, y_3)$ on a plain.

Write a program which prints "YES" if a point $P$ $(x_p, y_p)$ is in the triangle and "NO" if not.

Input

Input consists of several datasets. Each dataset consists of:

$x_1$ $y_1$ $x_2$ $y_2$ $x_3$ $y_3$ $x_p$ $y_p$

All the input are real numbers. Input ends with EOF. The number of datasets is less than or equal to 100.

Constraints

You can assume that:

$ -100 \leq x_1, y_1, x_2, y_2, x_3, y_3, x_p, y_p \leq 100$

1.0 $\leq$ Length of each side of a tringle

0.001 $\leq$ Distance between $P$ and each side of a triangle

Output

For each dataset, print "YES" or "NO" in a line.

Sample Input

0.0 0.0 2.0 0.0 2.0 2.0 1.5 0.5
0.0 0.0 1.0 4.0 5.0 3.0 -1.0 3.0

Output for the Sample Input

YES
NO

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = br.readLine();
		Boolean isNull = str==null;
		while (!isNull) {
			String[] datas = str.split(" ", 8);
			double x1 = Double.parseDouble(datas[0]);
			double y1 = Double.parseDouble(datas[1]);
			double x2 = Double.parseDouble(datas[2]);
			double y2 = Double.parseDouble(datas[3]);
			double x3 = Double.parseDouble(datas[4]);
			double y3 = Double.parseDouble(datas[5]);
			double xp = Double.parseDouble(datas[6]);
			double yp = Double.parseDouble(datas[7]);
			double x = xp - x1;
			double y = yp - y1;
			double p = x2 - x1;
			double q = y2 - y1;
			double r = x3 - x1;
			double u = y3 - y1;
			double[] coefficient = Simultaneous(p, r, x, q, u, y);
			double s = coefficient[0];
			double t = coefficient[1];
			if (s < 0 || t < 0) {
				System.out.println("NO");
			} else if (s + t > 0 && s + t < 1) {
				System.out.println("YES");
			} else {
				System.out.println("NO");
			}
			str = br.readLine();
			isNull = str==null;
		}
	}

	private static double[] Simultaneous(double a, double b, double c,
			double d, double e, double f) {
		double x = (double) (e * c - b * f) / (a * e - b * d);
		double y = (double) (a * f - c * d) / (a * e - b * d);
		double[] answer = { x, y };
		return answer;
	}
}