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

凸？

平面上の異なる 4 点　$A (x_a, y_a)$, $B (x_b, y_b)$, $C (x_c, y_c)$, $D(x_d, y_d)$ の座標を読み込んで、それら 4 点を頂点とした四角形 $ABCD$ に凹みがなければ YES、凹みがあれば NO と出力するプログラムを作成してください。

凹みのある四角形とは図 1 のような四角形です。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです。

$x_a$,$y_a$,$x_b$,$y_b$,$x_c$,$y_c$,$x_d$,$y_d$

$x_a$, $y_a$, $x_b$, $y_b$, $x_c$, $y_c$, $x_d$, $y_d$ はそれぞれ -100 以上 100 以下であり、実数で与えられます。

1 直線上に 3 つ以上点が並ぶことはないものとします。また、入力順に点を結んでいけば、四角形になる順番に点の座標が入力されるものとします。（つまり、図 2 のような形になる順番で点が与えられることはありません。)

データセットの数は 100 を超えません。

Output

各データセットごとに、YES または NO を１行に出力します。

Sample Input

0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0
0.0,0.0,3.0,0.0,1.0,1.0,1.0,3.0

Output for the Sample Input

YES
NO

Solution in C# (judge verdict: Accepted)

using System;
class Vector2
{
    private double x, y;
    public Vector2() { x = 0.0; y = 0.0; }
    public Vector2(double i, double j) { x = i; y = j; }
    public static Vector2 operator +(Vector2 op1, Vector2 op2)
    {
        Vector2 result = new Vector2();
        result.x = op1.x + op2.x;
        result.y = op1.y + op2.y;
        return result;
    }
    public static Vector2 operator -(Vector2 op1, Vector2 op2)
    {
        Vector2 result = new Vector2();
        result.x = op1.x - op2.x;
        result.y = op1.y - op2.y;
        return result;
    }
    public double X { get { return x; } }
    public double Y { get { return y; } }
}
class _0035
{
    public static void Main()
    {
        string str;
        string[] data;
        double a, b, c, d, e, f, tA, tB, tC, tD;
        Vector2 A, B, C, D, AC, BD;
        while ((str = Console.ReadLine()) != null)
        {
            data = str.Split(',');
            A = new Vector2(double.Parse(data[0]), double.Parse(data[1]));
            B = new Vector2(double.Parse(data[2]), double.Parse(data[3]));
            C = new Vector2(double.Parse(data[4]), double.Parse(data[5]));
            D = new Vector2(double.Parse(data[6]), double.Parse(data[7]));
            AC = C - A; BD = D - B;
            a = AC.X; b = -AC.Y; c = C.X * A.Y - A.X * C.Y;
            d = BD.X; e = -BD.Y; f = D.X * B.Y - B.X * D.Y;
            tB = a * B.Y + b * B.X - c; tD = a * D.Y + b * D.X - c;
            tA = d * A.Y + e * A.X - f; tC = d * C.Y + e * C.X - f;
            Console.WriteLine((tB * tD < 0 && tA * tC < 0) ? "YES" : "NO");
        }
    }
}