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;
using System.Collections.Generic;
using System.Linq;

static class IsItConvex
{
    static void Main()
    {
        Func<double[], double[], double[]> diff =
            (x, y) => new[] { y[0] - x[0], y[1] - x[1] };
        Func<double[], double[], double> cross =
            (x, y) => x[0] * y[1] - x[1] * y[0];
        var input = Console.In.ReadToEnd()
            .Split( 
                new[] { '\r', '\n' },
                StringSplitOptions.RemoveEmptyEntries )
            .Select( x => Array.ConvertAll( x.Split( ',' ), double.Parse ) );
        var q =
            from d in input
            let v = Enumerable.Range( 0, 4 )
                .Select( x => new[] { d[x * 2], d[x * 2 + 1] } )
                .ToArray()
            let c = new[] {
                cross( diff( v[0], v[1] ), diff( v[1], v[2] ) ),
                cross( diff( v[1], v[2] ), diff( v[2], v[3] ) ),
                cross( diff( v[2], v[3] ), diff( v[3], v[0] ) ),
                cross( diff( v[3], v[0] ), diff( v[0], v[1] ) ),
            }
            select c.Where( x => x < 0 ).Any() && c.Where( x => 0 < x ).Any()
                ? "NO" : "YES";
        q.ToList().ForEach( Console.WriteLine );
    }
}