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;
using System.Text;

namespace ConsoleApplication1
{
    struct Point { internal double x, y; }

    class Program
    {
        static void Main(string[] args)
        {
            StringBuilder sb = new StringBuilder();

            string input;

            while (!string.IsNullOrEmpty(input = Console.ReadLine()))
            {
                double[] arr = Array.ConvertAll(input.Split(','), double.Parse);

                Point a, b, c, d;
                a.x = arr[0]; a.y = arr[1];
                b.x = arr[2]; b.y = arr[3];
                c.x = arr[4]; c.y = arr[5];
                d.x = arr[6]; d.y = arr[7];

                if (GetPos(a, c, b) * GetPos(a, c, d) < 0 && GetPos(b, d, a) * GetPos(b, d, c) < 0)
                {
                    sb.AppendLine("YES");
                }
                else sb.AppendLine("NO");
            }
            Console.Write(sb);
        }

        static double GetPos(Point p0, Point p1, Point p2)
        {
            Point a = Sub(p1, p0);
            Point b = Sub(p2, p0);
            return a.x * b.y - a.y * b.x;
        }

        static Point Sub(Point a, Point b)
        {
            Point ret;
            ret.x = a.x - b.x;
            ret.y = a.y - b.y;
            return ret;
        }
    }
}