ABC086C - Traveling

atcoder.jp

次の目的地に向かって進んでいって、早く着きそうだったら周辺で時間を潰し、最終的に時間ぴったりに着けば OK。

using System;

namespace ABC086C
{
    class Program
    {
        static void Main(string[] args)
        {
            var n = int.Parse(Console.ReadLine());
            var lines = new int[n][];
            for (var i = 0; i < n; i++)
            {
                var line = Console.ReadLine().Split(' ');
                lines[i] = new int[3]
                {
                    int.Parse(line[0]),
                    int.Parse(line[1]),
                    int.Parse(line[2]),
                };
            } 

            var t = 0;
            var x = 0;
            var y = 0;
            for (var i = 0; i < lines.Length; i++)
            {
                var tNext = lines[i][0];
                var xNext = lines[i][1];
                var yNext = lines[i][2];

                var tDiff = tNext - t;
                for(var j = 0; j < tDiff; j++)
                {
                    if (x != xNext)
                    {
                        if (x < xNext)
                        {
                            x++;
                        }
                        else
                        {
                            x--;
                        }
                    }
                    else if (y != yNext)
                    {
                        if (y < yNext)
                        {
                            y++;
                        }
                        else
                        {
                            y--;
                        }
                    }
                    else
                    {
                        // 目的地に早く着いてしまったら周囲で時間を潰す
                        y++;
                    }
                }

                // 時間ピッタリに着けなかったら No
                if (x != xNext || y != yNext)
                {
                    Console.WriteLine("No");
                    return;
                }
                t = tNext;
            }
            Console.WriteLine("Yes");
        }
    }
}