Problem:
有料道路通行料

20XX年に喜多方市熱塩加納町から南会津町までの6区間、総距離58kmの会津中央道路が完成し開通する予定です。

開通後、半年間は利用促進のため17時30分〜19時30分までに出発ICか到着ICを通過し、なおかつ走行距離が40km以下の車に対する通行料金は半額になります。ただし料金は50円単位とし、端数は切り上げます。下記の表は料金と距離の一覧表です。

例えば喜多方（２）から会津若松（４）までは料金が450円、距離が12kmとなります。半額時間帯であれば250円になります。

出発IC、出発IC通過時刻、到着IC、到着IC通過時刻を入力とし、料金を計算して出力するプログラムを作成してください。ただし、入力される時刻は24 時間表記の値とします。なお、17時30分および19時30分ちょうどに通過した場合も半額時間帯に含めます。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロひとつの行で示されます。
各データセットは以下の形式で与えられます。

d
hd md
a
ha ma

１行目に出発ICの番号 d (1 ≤ d ≤ 7)、２行目に出発ICの通過時刻の時間 hd (0 ≤ hd ≤ 23) と分 md (0 ≤ md ≤ 59) が与えられます。

3行目に到着ICの番号 a (1 ≤ a ≤ 7)、４行目に到着ICの通過時刻の時間 ha (0 ≤ ha ≤ 23) と分 ma (0 ≤ ma ≤ 59) が与えられます。

Output

データセットごとに通行料金（整数）を１行に出力します。

Sample Input

2
17 25
4
17 45
4
17 25
7
19 35
0

Output for the Sample Input

250
1300

Solution in C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

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

            int[][] table = new int[8][];
            table[1] = new int[] { 0, 0, 300, 500, 600, 700, 1350, 1650 };
            table[2] = new int[] { 0, 6, 0, 350, 450, 600, 1150, 1500 };
            table[3] = new int[] { 0, 13, 7, 0, 250, 400, 1000, 1350 };
            table[4] = new int[] { 0, 18, 12, 5, 0, 250, 850, 1300 };
            table[5] = new int[] { 0, 23, 17, 10, 5, 0, 600, 1150 };
            table[6] = new int[] { 0, 43, 37, 30, 25, 20, 0, 500 };
            table[7] = new int[] { 0, 58, 52, 45, 40, 35, 15, 0 };

            while (true)
            {
                int s = int.Parse(Console.ReadLine());

                if (s == 0) break;

                bool flg = false;

                string[] input = Console.ReadLine().Split(' ');
                int h = int.Parse(input[0]);
                int m = int.Parse(input[1]);
                flg = CheckTime(h, m);

                int t = int.Parse(Console.ReadLine());

                if (!flg)
                {
                    input = Console.ReadLine().Split(' ');
                    h = int.Parse(input[0]);
                    m = int.Parse(input[1]);
                    flg = CheckTime(h, m);
                }
                else Console.ReadLine();

                int min = Math.Min(s, t);
                int max = Math.Max(s, t);

                int p = table[min][max];

                if (flg && table[max][min] <= 40)
                {
                    p /= 2;

                    int q = p % 50;
                    if (q > 0) p = p - q + 50;
                }
                sb.AppendLine(p.ToString());
            }
            Console.Write(sb);
        }

        static bool CheckTime(int h, int m)
        {
            switch (h)
            {
                case 17:
                    return m >= 30;
                case 18:
                    return true;
                case 19:
                    return m <= 30;
                default:
                    return false;
            }
        }
    }
}