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: Wrong Answer)

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

namespace AOJ.Volume1
{
    public class HighwayToll
    {
        private struct Toll
        {
            public int From;
            public int To;
            public int Fee;
        }

        public static int Main()
        {
            DateTime st_limit = new DateTime(2000, 1, 1, 17, 30, 0);
            DateTime ed_limit = new DateTime(2000, 1, 1, 19, 30, 0);
            // 料金表
            var tolls = new List<Toll>()
            {
                new Toll{From = 1, To = 2, Fee = 300},
                new Toll{From = 1, To = 3, Fee = 500},
                new Toll{From = 1, To = 4, Fee = 600},
                new Toll{From = 1, To = 5, Fee = 700},
                new Toll{From = 1, To = 6, Fee = 1350},
                new Toll{From = 1, To = 7, Fee = 1650},
                new Toll{From = 2, To = 3, Fee = 350},
                new Toll{From = 2, To = 4, Fee = 450},
                new Toll{From = 2, To = 5, Fee = 600},
                new Toll{From = 2, To = 6, Fee = 1150},
                new Toll{From = 2, To = 7, Fee = 1500},
                new Toll{From = 3, To = 4, Fee = 250},
                new Toll{From = 3, To = 5, Fee = 400},
                new Toll{From = 3, To = 6, Fee = 1000},
                new Toll{From = 3, To = 7, Fee = 1350},
                new Toll{From = 4, To = 5, Fee = 250},
                new Toll{From = 4, To = 6, Fee = 850},
                new Toll{From = 4, To = 7, Fee = 1300},
                new Toll{From = 5, To = 6, Fee = 600},
                new Toll{From = 5, To = 6, Fee = 1150},
                new Toll{From = 6, To = 7, Fee = 500}
            };

            // 距離
            var dist = new int[8] { 0, 0, 6, 13, 18, 23, 43, 58 };

            while (true)
            {
                int start = int.Parse(Console.ReadLine());
                if (start == 0) { break; }

                var input = Console.ReadLine().Split(' ');
                int hour = int.Parse(input[0]);
                int minute = int.Parse(input[1]);
                DateTime st = new DateTime(2000, 1, 1, hour, minute, 0);

                int end = int.Parse(Console.ReadLine());
                input = Console.ReadLine().Split(' ');
                hour = int.Parse(input[0]);
                minute = int.Parse(input[1]);
                DateTime ed = new DateTime(2000, 1, 1, hour, minute, 0);

                // 時刻から割り引き対象か判定
                bool discount;
                if (st >= st_limit || ed <= ed_limit) { discount = true; }
                else { discount = false; }

                // 料金計算
                if (start > end)
                {
                    // 入れ替え
                    int tmp = start;
                    start = end;
                    end = tmp;
                }
                // 割引は距離が40km以下の場合
                if (dist[end] - dist[start] > 40) { discount = false; }

                var t = tolls.FirstOrDefault(x => x.From == start && x.To == end);
                if (discount)
                {
                    int ans = t.Fee / 2;
                    if (ans % 50 != 0)
                    {
                        if (ans % 100 > 50) { ans = ((ans / 100) + 1) * 100; }
                        else { ans = ans - (ans % 50) + 50; }
                        Console.WriteLine(ans);
                    }
                }
                else { Console.WriteLine(t.Fee); }
            }
            return 0;
        }
    }
}