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)$ の座標を読み込んで、直線 $AB$ と $CD$ が直交する場合には YES、直交しない場合には NO と出力するプログラムを作成してください。ここで、「直線」とは線分のことではありません。以下の図を参考にして下さい。

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 以下であり、各値は小数点以下最大 5 桁までの数字を含む実数で与えられます。

データセットの数は 100 を超えません。

Output

各データセットに対して、YES または NO を１行に出力して下さい。

Sample Input

1.0 1.0 2.0 2.0 0.0 0.0 1.0 -1.0
0.0 0.0 2.0 0.0 -1.0 2.0 2.0 2.0
10.0 6.0 3.4 5.2 6.8 9.5 4.3 2.1
2.5 3.5 2.5 4.5 -3.3 -2.3 6.8 -2.3

Output for the Sample Input

YES
NO
NO
YES

Solution in C# (judge verdict: Accepted)

using System;
using System.Text;

namespace AOJ.Volume0
{
    public class Orthogonal
    {
        public static int Main()
        {
            var output = new StringBuilder();
            while (true)
            {
                string tmp = Console.ReadLine();
                if (string.IsNullOrEmpty(tmp)) { break; }

                var input = tmp.Split(' ');
                decimal xa = decimal.Parse(input[0]);
                decimal ya = decimal.Parse(input[1]);
                decimal xb = decimal.Parse(input[2]);
                decimal yb = decimal.Parse(input[3]);
                decimal xc = decimal.Parse(input[4]);
                decimal yc = decimal.Parse(input[5]);
                decimal xd = decimal.Parse(input[6]);
                decimal yd = decimal.Parse(input[7]);

                // 2?????????????????????(0,0)???????????????(x1, y1)??¨(x2, y2)??§??´?????????
                decimal x1 = xb - xa;
                decimal y1 = yb - ya;
                decimal x2 = xd - xc;
                decimal y2 = yd - yc;

                // ??????????±???????
                decimal n = (x1 * x2) + (y1 * y2);
                if(n == 0.0m) { output.AppendLine("YES"); }
                else { output.AppendLine("NO"); }
            }

            Console.Write(output);
            return 0;
        }
    }
}