結果

問題 No.3360 平方根の整数倍の整数部分
コンテスト
ユーザー tobisatis
提出日時 2025-11-14 23:08:30
言語 C#
(.NET 8.0.404)
結果
AC  
実行時間 310 ms / 2,000 ms
コード長 977 bytes
コンパイル時間 8,086 ms
コンパイル使用メモリ 172,112 KB
実行使用メモリ 187,476 KB
最終ジャッジ日時 2025-11-14 23:08:43
合計ジャッジ時間 12,128 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 38
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (114 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #

#nullable enable

var input = Console.ReadLine()!.Split(' ');
var n = long.Parse(input[0]);
var m = int.Parse(input[1]);

if (n == 1)
{
    Console.WriteLine("NaN");
    return;
}

int SolveN(long s)
{
    var i = 1;
    var l = s;
    while (true)
    {
        while (i < l)
        {
            m--;
            if (m == 0) return i;
            i++;
        }
        i++;
        l += s;
    }
}

int SolveF(decimal s)
{
    var i = 1;
    var l = s;
    while (true)
    {
        var k = (long)l;
        while (i < k)
        {
            m--;
            if (m == 0) return i;
            i++;
        }
        while (i < l) i++;
        l += s;
    }
}

int Solve()
{
    for (var i = 1L; i * i <= n; i++) if (i * i == n) return SolveN(i);
    decimal l = 0;
    decimal r = n;
    for (var i = 0; i < 160; i++)
    {
        var mid = (l + r) / 2;
        if (mid * mid < n) l = mid;
        else r = mid;
    }
    return SolveF(l);
}
Console.WriteLine(Solve());
0