結果

問題 No.942 プレゼント配り
コンテスト
ユーザー kakel-san
提出日時 2025-12-16 22:28:47
言語 C#
(.NET 10.0.101)
結果
AC  
実行時間 85 ms / 2,000 ms
コード長 2,433 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 7,484 ms
コンパイル使用メモリ 168,192 KB
実行使用メモリ 187,512 KB
最終ジャッジ日時 2025-12-16 22:28:59
合計ジャッジ時間 10,802 ms
ジャッジサーバーID
(参考情報)
judge5 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 2
other AC * 18
権限があれば一括ダウンロードができます
コンパイルメッセージ
  復元対象のプロジェクトを決定しています...
  /home/judge/data/code/main.csproj を復元しました (105 ミリ秒)。
  main -> /home/judge/data/code/bin/Release/net8.0/main.dll
  main -> /home/judge/data/code/bin/Release/net8.0/publish/

ソースコード

diff #
raw source code

using System;
using static System.Console;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.Intrinsics.Arm;

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 c = NList;
        var (n, k) = (c[0], c[1]);
        var take = n / k;
        if ((k % 2 == 0 && take % 2 == 1) || (n == k && n > 1))
        {
            WriteLine("No");
            return;
        }
        var ans = new int[k][];
        for (var i = 0; i < k; ++i) ans[i] = new int[take];
        if (take % 2 == 0)
        {
            for (var j = 0; j < take; j += 2)
            {
                for (var i = 0; i < k; ++i) ans[i][j] = i + j * k + 1;
                for (var i = 0; i < k; ++i) ans[k - i - 1][j + 1] = i + j * k + k + 1;
            }
        }
        else
        {
            for (var j = 0; j + 1 < take; j += 2)
            {
                for (var i = 0; i < k; ++i) ans[i][j] = i + j * k + 1;
                for (var i = 0; i < k; ++i) ans[k - i - 1][j + 1] = i + j * k + k + 1;
            }
            var max = k / 2;
            var second = max + 1;
            var mid = n - max;
            for (var i = max; i >= 0; i -= 2)
            {
                var lt = (max - i) / 2;
                var lb = lt + i;
                if (i == 0)
                {
                    ans[lt][^1] = mid;
                }
                else
                {
                    (ans[lt][^2], ans[lb][^2]) = (ans[lb][^2], ans[lt][^2]);
                    ans[lt][^1] = mid + i;
                    ans[lb][^1] = mid - i;
                }
                var j = i - 1;
                if (j < 0) continue;
                lt = second + (max - i) / 2;
                lb = lt + j;
                if (j == 0)
                {
                    ans[lt][^1] = mid;
                }
                else
                {
                    (ans[lt][^2], ans[lb][^2]) = (ans[lb][^2], ans[lt][^2]);
                    ans[lt][^1] = mid + j;
                    ans[lb][^1] = mid - j;
                }
            }
        }
        WriteLine("Yes");
        WriteLine(string.Join("\n", ans.Select(ai => string.Join(" ", ai))));
    }
}
0