結果

問題 No.5009 Draw A Convex Polygon
ユーザー 👑 kakel-sankakel-san
提出日時 2022-12-03 23:37:40
言語 C#(csc)
(csc 3.9.0)
結果
AC  
実行時間 570 ms / 2,600 ms
コード長 2,950 bytes
コンパイル時間 1,018 ms
実行使用メモリ 87,748 KB
スコア 357,748
平均クエリ数 357749.00
最終ジャッジ日時 2022-12-03 23:37:46
合計ジャッジ時間 2,999 ms
ジャッジサーバーID
(参考情報)
judge15 / judge12
純コード判定しない問題か言語
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 570 ms
87,748 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;

class Program
{
    static int[] NList => ReadLine().TrimStart().Split().Select(int.Parse).ToArray();
    static int[] NMi => ReadLine().Split().Select(c => int.Parse(c) - 1).ToArray();
    static int[][] NMap(int n) => Enumerable.Repeat(0, n).Select(_ => NMi).ToArray();
    public static void Main()
    {
        Solve();
    }
    static void Solve()
    {
        var d = new List<int[]>();
        d.Add(new int[] { 999955281, -999916840 });
        for (var i = 0; i < 44719; ++i)
        {
            var last = d[d.Count - 1];
            d.Add(new int[] { last[0] + 1, last[1] + d.Count });
        }
        var cnt = d.Count;
        for (var i = cnt - 2; i > 0; --i) d.Add(new int[] { d[i][0], -d[i][1]});
        for (var i = 1; i < cnt; ++i) d.Add(new int[] { -d[i][1], d[i][0] });
        for (var i = cnt - 2; i > 0; --i) d.Add(new int[] { d[i][1], d[i][0] });
        for (var i = 1; i < cnt; ++i) d.Add(new int[] { -d[i][0], -d[i][1] });
        for (var i = cnt - 2; i > 0; --i) d.Add(new int[] { -d[i][0], d[i][1] });
        for (var i = 1; i < cnt; ++i) d.Add(new int[] { d[i][1], -d[i][0] });
        for (var i = cnt - 2; i > 0; --i) d.Add(new int[] { -d[i][1], -d[i][0] });
        // d.RemoveAt(0);
        WriteLine(d.Count - 1);
        // var prev = Math.Atan2(d[0][1] - d[d.Count - 1][1], d[0][0] - d[d.Count - 1][0]);
        // for (var i = 0; i < d.Count; ++i)
        // {
        //     if (i + 1 < d.Count)
        //     {
        //         var cur = Math.Atan2(d[i + 1][1] - d[i][1], d[i + 1][0] - d[i][0]);
        //         if (cur == prev || (cur < prev && cur + Math.PI * 2 - prev > 1))
        //         {
        //             WriteLine("!!! at" + i);
        //             WriteLine(string.Join(" ", d[i - 1]) + " " + prev);
        //             WriteLine(string.Join(" ", d[i]) + " " + cur);
        //             WriteLine(string.Join(" ", d[i + 1]));
        //             return;
        //         }
        //         WriteLine($"{d[i][0]} {d[i][1]} {cur}");
        //         prev = cur;
        //     }
        //     else
        //     {
        //         var cur = Math.Atan2(d[0][1] - d[i][1], d[0][0] - d[i][0]);
        //         if (cur == prev || (cur < prev && cur + Math.PI * 2 - prev > 1))
        //         {
        //             WriteLine("!!! at" + i);
        //             WriteLine(string.Join(" ", d[i - 1]));
        //             WriteLine(string.Join(" ", d[i]));
        //             WriteLine(string.Join(" ", d[i + 1]));
        //             return;
        //         }
        //         WriteLine($"{d[i][0]} {d[i][1]} {cur}");
        //         prev = cur;
        //     }
        // }
        WriteLine(string.Join("\n", d.Skip(1).Select(di => string.Join(" ", di))));
    }
}
0