結果
| 問題 |
No.5009 Draw A Convex Polygon
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 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 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 |
ソースコード
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))));
}
}