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 AOJ
{
	class Program
	{
		static void Main(string[] args)
		{
			string line;
			while ((line = Console.ReadLine()) != null)
			{
				double[] l = line.Split(',').Select(i => double.Parse(i)).ToArray<double>();
				Point a = new Point(l[0], l[1]);
				Point b = new Point(l[2], l[3]);
				Point c = new Point(l[4], l[5]);
				Point d = new Point(l[6], l[7]);
				Console.WriteLine((f(b, d, a, c) > 0d || f(a, c, b, d) > 0d) ? "NO" : "YES");
			}
		}

		static double f(Point p1, Point p2, Point p3, Point p4)
		{
			return ((p1.X - p2.X) * (p3.Y - p1.Y) +
				(p1.Y - p2.Y) * (p1.X - p3.X)) * ((p1.X - p2.X) * (p4.Y - p1.Y)
				+ (p1.Y - p2.Y) * (p1.X - p4.X));
		}

		public class Point
		{
			public Point(double x, double y) { X = x; Y = y; }
			public double X { get; private set; }
			public double Y { get; private set; }
		}
	}
}