結果

問題 No.3292 World Map Distance
ユーザー tobisatis
提出日時 2025-09-17 06:33:45
言語 C#
(.NET 8.0.404)
結果
WA  
実行時間 -
コード長 2,261 bytes
コンパイル時間 8,676 ms
コンパイル使用メモリ 167,976 KB
実行使用メモリ 64,880 KB
最終ジャッジ日時 2025-09-17 06:34:03
合計ジャッジ時間 18,167 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 5 WA * 10 TLE * 1 -- * 18
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (116 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

#nullable enable

const int P = 30;
const decimal E = 0.000000000000000000000000001M;
const decimal PI = 3.141592653589793238462643383279M;
static decimal Sin(decimal x)
{
    var nxx = -x * x;
    decimal term = x;
    decimal sum = x;
    var n = 1;
    for (var i = 3; n < P; i += 2, n++)
    {
        term *= nxx / (i * (i - 1));
        sum += term;
    }
    return sum;
}
static decimal Cos(decimal x)
{
    var nxx = -x * x;
    decimal term = 1;
    decimal sum = 1;
    var n = 1;
    for (var i = 2; n < P; i += 2, n++)
    {
        term *= nxx / (i * (i - 1));
        sum += term;
    }
    return sum;
}
static decimal Atan(decimal z)
{
    if (z > 1) return PI / 2 - Atan(1m / z);
    if (z < -1) return -PI / 2 - Atan(1m / z);
    var nzz = -z * z;
    decimal term = z;
    decimal sum = z;
    var n = 1;
    for (var i = 3; n < P; i += 2, n++)
    {
        term *= nzz;
        sum += term / i;
    }
    return sum;
}
static decimal Atan2(decimal y, decimal x)
{
    if (-E <= x && x <= E) return (y > 0 ? PI : -PI) / 2;
    var arg = Atan(y / x);
    if (x < 0) return arg + (y >= 0 ? PI : -PI);
    return arg;
}

int n, xMax, yMax;
{
    var input = Console.ReadLine()!.Split(' ');
    n = int.Parse(input[0]);
    xMax = int.Parse(input[1]);
    yMax = int.Parse(input[2]);
}
var xz = new long[n];
var yz = new long[n];
for (var i = 0; i < n; i++)
{
    var input = Console.ReadLine()!.Split(' ');
    xz[i] = int.Parse(input[0]);
    yz[i] = int.Parse(input[1]);
}

var ans = 0L;
for (var _i = 0; _i < 2; _i++)
{
    decimal gx = 0;
    decimal gy = 0;
    foreach (var x in xz)
    {
        var arg = PI * 2 * (x - 1) / xMax;
        gx -= Cos(arg) / n;
        gy -= Sin(arg) / n;
    }
    var phase = Atan2(gy, gx) + PI * 2;
    var c = (long)(phase / (PI * 2) * xMax) % xMax;
    var best = 0L;
    for (var i = -2; i <= 2; i++)
    {
        var t = (c + i + xMax + xMax) % xMax + 1;
        var score = 0L;
        foreach (var x in xz)
        {
            var l = Math.Min(x, t);
            var r = Math.Max(x, t);
            score += Math.Min(r - l, xMax - r + l);
        }
        best = Math.Max(best, score);
    }
    ans += best;
    (xMax, yMax) = (yMax, xMax);
    (xz, yz) = (yz, xz);
}
Console.WriteLine(ans);
0