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.*;

class Main{
        public static void main(String[] args){
                Scanner sc = new Scanner(System.in);
                while(sc.hasNext()){
                        double[][] x = new double[4][2];
                        String[] s = sc.nextLine().split(",");
                        for(int i = 0; i < 4; i++){
                                for(int j = 0; j < 2; j++){
                                        x[i][j] = Double.parseDouble(s[i*2+j]);
                                }   
                        }   
                        System.out.println(judge(x) ? "YES": "NO");
                }   
                sc.close();
        }   
        static boolean vp(double[][] x){
                return (x[2][0]-x[1][0])*(x[3][1]-x[2][1])-(x[2][1]-x[1][1])*(x[3][0]-x[2][0]) > 0;
        }   
        static boolean judge(double[][] x){
                boolean flag = vp(x);
                for(int i = 0; i < 3; i++){
                        shift(x);
                        if(flag != vp(x)){
                                return false;
                        }   
                }   
                return true;
        }   
        static void shift(double[][] x){
                double[] _x = {x[3][0], x[3][1]};
                for(int i = 3; i > 0; i--){
                        x[i][0] = x[i-1][0];
                        x[i][1] = x[i-1][1];
                }   
                x[0][0] = _x[0];
                x[0][1] = _x[1];
        }   
}