Problem:
スピードスケートバッジテスト

スピードスケートバッジテストでは、2 種類の距離で規定されたタイムを上回った場合に級が認定されます。例えば A 級になるには 500 M で 40.0 秒未満、かつ 1000 M で 1 分 23 秒未満であることが求められます。

スピードスケート大会 (500 M と 1000 M) で記録したタイムを入力とし、スピードスケートバッジテストで何級に相当するかを出力するプログラムを作成して下さい。500 M と1000 M のバッジテスト規定タイムは下表のとおりです。 E 級に満たなかった場合には、NA と出力してください。

500 M

1000 M

AAA 級

35 秒 50

1 分 11 秒 00

AA 級

37 秒 50

1 分 17 秒 00

A 級

40 秒 00

1 分 23 秒 00

B 級

43 秒 00

1 分 29 秒 00

C 級

50 秒 00

1 分 45 秒 00

D 級

55 秒 00

1 分 56 秒 00

E 級

1分10 秒 00

2 分 28 秒 00

Input

複数のデータセットが与えられます。各データセットとして、500 M タイムと 1000 M タイムをそれぞれ表す実数 t1, t2 (8.0 ≤ t1, t2 ≤ 360.0) が空白区切りで与えられます。t1, t2 は秒単位で小数点以下最大 2 桁までの数字を含む実数で与えられます。

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

Output

各データセットごとに、判定結果 AAA ~ E または NA を１行に出力してください。

Sample Input

40.0 70.0
72.5 140.51

Output for the Sample Input

B
NA

Solution in C# (judge verdict: Accepted)

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

namespace _0123
{
    public class Program

    {
        public struct Lank
        {
            public string Name { get; set; }
            public double Border0500 { get; set; }
            public double Border1000 { get; set; }
            public Lank(string name, TimeSpan _500, TimeSpan _1000)
            { Name = name; Border0500 = _500.TotalSeconds; Border1000 = _1000.TotalSeconds; }
        }
        public static List<Lank> borders = new List<Lank>();

        public static void Main(string[] args)
        {
            borders.Add(new Lank("AAA", new TimeSpan(0, 0, 0, 35, 500), new TimeSpan(0, 0, 1, 11, 000)));
            borders.Add(new Lank("AA" , new TimeSpan(0, 0, 0, 37, 500), new TimeSpan(0, 0, 1, 17, 000)));
            borders.Add(new Lank("A"  , new TimeSpan(0, 0, 0, 40, 000), new TimeSpan(0, 0, 1, 23, 000)));
            borders.Add(new Lank("B"  , new TimeSpan(0, 0, 0, 43, 000), new TimeSpan(0, 0, 1, 29, 000)));
            borders.Add(new Lank("C"  , new TimeSpan(0, 0, 0, 50, 000), new TimeSpan(0, 0, 1, 45, 000)));
            borders.Add(new Lank("D"  , new TimeSpan(0, 0, 0, 55, 000), new TimeSpan(0, 0, 1, 56, 000)));
            borders.Add(new Lank("E"  , new TimeSpan(0, 0, 1, 10, 000), new TimeSpan(0, 0, 2, 28, 000)));

            while (true)
            {
                string line = Console.ReadLine();
                if (string.IsNullOrEmpty(line)) return;

                double[] times = Array.ConvertAll(line.Trim().Split(' '), e => double.Parse(e));
                Console.WriteLine(GetLankName(times));
            }          
        }

        private static string GetLankName(double[] times)
        {
            foreach (var item in borders)
            {
                if (times[0] < item.Border0500 && times[1] < item.Border1000) return item.Name;
            }
            return "NA";
        }

        static string RSt() { return Console.ReadLine(); }
        static int RInt() { return int.Parse(Console.ReadLine().Trim()); }
        static long RLong() { return long.Parse(Console.ReadLine().Trim()); }
        static double RDouble() { return double.Parse(Console.ReadLine()); }
        static string[] RStAr(char sep = ' ') { return Console.ReadLine().Trim().Split(sep); }
        static int[] RIntAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => int.Parse(e)); }
        static long[] RLongAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => long.Parse(e)); }
        static double[] RDoubleAr(char sep = ' ') { return Array.ConvertAll(Console.ReadLine().Trim().Split(sep), e => double.Parse(e)); }
        static string WAr<T>(IEnumerable<T> array, string sep = " ") { return string.Join(sep, array.Select(x => x.ToString()).ToArray()); }
    }

}