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

import java.util.Scanner;
public class Main {
	public static void main(String[] args){
		Scanner sc=new Scanner(System.in);
		while(sc.hasNext()){
			String[] str=sc.next().split(",");
			double xa=Double.parseDouble(str[0]);
			double ya=Double.parseDouble(str[1]);
			double xb=Double.parseDouble(str[2]);
			double yb=Double.parseDouble(str[3]);
			double xc=Double.parseDouble(str[4]);
			double yc=Double.parseDouble(str[5]);
			double xd=Double.parseDouble(str[6]);
			double yd=Double.parseDouble(str[7]);
			boolean flag=true;
			double z1=(xc-xb)*(ya-yb)-(yc-yb)*(xa-xb);
			double z2=(xb-xd)*(ya-yd)-(yb-yd)*(xa-xd);
			double z3=(xc-xb)*(ya-yb)-(yc-yb)*(xa-xb);
			if(z1>0&&z2>0&&z3>0||z1<0&&z2<0&&z3<0){
				flag=false;
			}
			z1=(xd-xc)*(yb-yc)-(yd-yc)*(xb-xc);
			z2=(xc-xa)*(yb-ya)-(yc-ya)*(xb-xa);
			z3=(xd-xc)*(yb-yc)-(yd-yc)*(xb-xc);
			if(z1>0&&z2>0&&z3>0||z1<0&&z2<0&&z3<0){
				flag=false;
			}
			z1=(xa-xd)*(yc-yd)-(ya-yd)*(xc-xd);
			z2=(xd-xb)*(yc-yb)-(yd-yb)*(xc-xb);
			z3=(xa-xd)*(yc-yd)-(ya-yd)*(xc-xd);
			if(z1>0&&z2>0&&z3>0||z1<0&&z2<0&&z3<0){
				flag=false;
			}
			z1=(xb-xa)*(yd-ya)-(yb-ya)*(xd-xa);
			z2=(xa-xc)*(yd-yc)-(ya-yc)*(xd-xc);
			z3=(xb-xa)*(yd-ya)-(yb-ya)*(xd-xa);
			if(z1>0&&z2>0&&z3>0||z1<0&&z2<0&&z3<0){
				flag=false;
			}
			System.out.println(flag?"YES":"NO");
		}
	}
}