結果

問題 No.731 等差数列がだいすき
コンテスト
ユーザー 👑 kakel-san
提出日時 2026-10-11 17:15:46
言語 C#
(.NET 10.0.402 + ACL)
コンパイル:
dotnet_c
実行:
/usr/bin/dotnet_wrap
結果
WA  
実行時間 -
コード長 2,128 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 12,678 ms
コンパイル使用メモリ 171,412 KB
実行使用メモリ 37,248 KB
最終ジャッジ日時 2026-10-11 17:16:02
合計ジャッジ時間 14,157 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 14 WA * 4
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (186 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net10.0/main.dll
  main -> /home/judge/data/code/bin/Release/net10.0/publish/

ソースコード

diff #
raw source code

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

class Program
{
    static int NN => int.Parse(ReadLine());
    static int[] NList => ReadLine().Split().Select(int.Parse).ToArray();
    public static void Main()
    {
        Solve();
    }
    static void Solve()
    {
        var n = NN;
        var a = NList;
        var half = (n - 1) / 2.0;
        var ave = 0.0;
        for (var i = 0; i < n; ++i) ave += a[i];
        ave /= n;
        var dleft = -400000.0 / (n - 1);
        var dright = 400000.0 / (n - 1);
        while (dright - dleft > 0.0000001)
        {
            var dmid1 = (dleft * 2 + dright) / 3;
            var dmid2 = (dleft + dright * 2) / 3;
            var sum1 = 0.0;
            var sum2 = 0.0;
            for (var i = 0; i < n; ++i)
            {
                var b1 = ave + (i - half) * dmid1;
                var b2 = ave + (i - half) * dmid2;
                sum1 += (a[i] - b1) * (a[i] - b1);
                sum2 += (a[i] - b2) * (a[i] - b2);
            }
            if (sum1 > sum2) dleft = dmid1;
            else dright = dmid2;
        }
        var vleft = -0.1;
        var vright = 100000.1;
        while (vright - vleft > 0.0000001)
        {
            var vmid1 = (vleft * 2 + vright) / 3;
            var vmid2 = (vleft + vright * 2) / 3;
            var sum1 = 0.0;
            var sum2 = 0.0;
            for (var i = 0; i < n; ++i)
            {
                var b1 = vmid1 + (i - half) * dleft;
                var b2 = vmid2 + (i - half) * dleft;
                sum1 += (a[i] - b1) * (a[i] - b1);
                sum2 += (a[i] - b2) * (a[i] - b2);
            }
            if (sum1 > sum2) vleft = vmid1;
            else vright = vmid2;
        }
        var ans = 0.0;
        for (var i = 0; i < n; ++i)
        {
            var b1 = vleft + (i - half) * dleft;
            ans += (a[i] - b1) * (a[i] - b1);
        }
        WriteLine($"{vleft - half * dleft:0.0000000} {dleft:0.0000000}");
        WriteLine($"{ans:0.0000000}");
    }
}
0