結果

問題 No.1204 お菓子配り-FINAL
コンテスト
ユーザー vjudge1
提出日時 2026-04-11 12:07:21
言語 C
(gcc 15.2.0)
コンパイル:
gcc-15 -O2 -DONLINE_JUDGE -o a.out _filename_ -lm
実行:
./a.out
結果
WA  
実行時間 -
コード長 1,358 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 316 ms
コンパイル使用メモリ 43,312 KB
実行使用メモリ 7,976 KB
最終ジャッジ日時 2026-04-11 12:07:31
合計ジャッジ時間 4,872 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other WA * 130
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <stdio.h>
#include <stdlib.h>

const int mod = 998244353;
int h, w, k, n, d, f[400010], ff[400010], ans = 0;

int min(int a, int b) { return a < b ? a : b; }

int ksm(int a, int b) {
    int ans = 1;
    while (b) {
        if (b & 1) ans = 1ll * ans * a % mod;
        b >>= 1;
        a = 1ll * a * a % mod;
    }
    return ans;
}

int C(int x, int y) {
    if (y < 0 || y > x) return 0;
    return 1ll * f[x] * ff[y] % mod * ff[x - y] % mod;
}

int main() {
    scanf("%d %d %d", &h, &w, &k);
    h--; w--;
    n = h + w;
    d = k / 2;
    f[0] = ff[0] = 1;
    for (int i = 1; i <= n; i++) {
        f[i] = 1ll * i * f[i - 1] % mod;
        ff[i] = ksm(f[i], mod - 2);
    }
    if (d == 0) {
        printf("%d", C(n, h));
        return 0;
    }
    for (int m = 0; m <= min(h, w); m++) {
        int sum1 = 1ll * C(n, m * 2) * C(n - m * 2, h - m) % mod;
        int sum2 = 0;
        int period = d * 2 + 2;
        int kmin = - (2 * m + period) / period - 2;
        int kmax = (2 * m + period) / period + 2;
        for (int k = kmin; k <= kmax; k++) {
            int t1 = m + k * period;
            int t2 = m + d + 1 + k * period;
            sum2 = (sum2 + C(2 * m, t1)) % mod;
            sum2 = (sum2 - C(2 * m, t2) + mod) % mod;
        }
        ans = (ans + 1ll * sum1 * sum2) % mod;
    }
    printf("%d", ans);
    return 0;
}
0