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 C# (judge verdict: Accepted)

using System;
/// <summary>
/// imitating http://judge.u-aizu.ac.jp/onlinejudge/review.jsp?rid=2590247#1
/// </summary>
/// practice de get set
/// 
namespace HelloWorld
{
    internal class Vector
    {
        internal double x { get; set; }
        internal double y { get; set; }
    }
    class Program
    {
        static void Main()
        {
            string line;
            while ((line = Console.ReadLine()) != null)
            {
                double[] num = Array.ConvertAll(line.Split(), double.Parse);
                Vector a = new Vector { x = num[0], y = num[1] };
                Vector b = new Vector { x = num[2], y = num[3] };
                Vector c = new Vector { x = num[4], y = num[5] };
                Vector p = new Vector { x = num[6], y = num[7] };
                Console.WriteLine(Check(a, b, c, p) ? "YES" : "NO");
            }
        }
        public static bool Check(Vector a, Vector b, Vector c, Vector p)
        {
            var ab = mkVector(b, a);            
            var bc = mkVector(c, b);
            var ca = mkVector(a, c);
            var ap = mkVector(p, a);
            var bp = mkVector(p, b);
            var cp = mkVector(p, c);
            var c1 = ab.x * bp.y - ab.y * bp.x;                 //Getting Squares using vector
            var c2 = bc.x * cp.y - bc.y * cp.x;
            var c3 = ca.x * ap.y - ca.y * ap.x;
            if ((c1 > 0 && c2 > 0 && c3 > 0) || (c1 < 0 && c2 < 0 && c3 < 0)) // if existing
                return true;
            else
                return false;
        }
        /// <summary>
        /// Getting Each distances
        /// </summary>
        /// <param name="a"></param>
        /// <param name="b"></param>
        /// <returns></returns>
        public static Vector mkVector(Vector a, Vector b)
        {
            var c = new Vector();
            c.x = a.x - b.x;
            c.y = a.y - b.y;
            return c;
        }
    }
}