結果
問題 | No.5009 Draw A Convex Polygon |
ユーザー | kakel-san |
提出日時 | 2022-12-03 23:20:41 |
言語 | C#(csc) (csc 3.9.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,776 bytes |
コンパイル時間 | 918 ms |
実行使用メモリ | 85,100 KB |
スコア | 0 |
平均クエリ数 | 357750.00 |
最終ジャッジ日時 | 2022-12-03 23:20:45 |
合計ジャッジ時間 | 3,949 ms |
ジャッジサーバーID (参考情報) |
judge16 / judge11 |
(要ログイン)
ソースコード
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] }); WriteLine(d.Count); // var prev = 0.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 += Math.PI * 2; // if (cur == prev || cur - 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; // } // prev = cur; // } // else // { // var cur = Math.Atan2(d[0][1] - d[i][1], d[0][0] - d[i][0]); // if (cur < prev) cur += Math.PI * 2; // if (cur == prev || cur - prev > 1) // { // WriteLine("!!! at" + i); // WriteLine(string.Join(" ", d[i - 1])); // WriteLine(string.Join(" ", d[i])); // WriteLine(string.Join(" ", d[i + 1])); // return; // } // prev = cur; // } // } WriteLine(string.Join("\n", d.Select(di => string.Join(" ", di)))); } }