バイトの競プロメモ

主に競技プログラミング

E - Stop. Otherwise...

https://atcoder.jp/contests/arc102/tasks/arc102_c

あるiについて考えると合計がiとなるようなペアがp種類存在する
この時、ペアの片方は自由に選べ、選ぶ物の数をq種類とする
するとiが奇数の時に
res += pCq * 2^q * k-2p+q H n-q となる
全てのqについて上を行えばいい
Submission #4418953 - AtCoder Regular Contest 102

void solve() {
    cin >> k >> n;
    setMod(998244353);
    vm p2(k5);
    p2[0] = 1;
    rep(i, 1, k5)p2[i] = p2[i - 1] * 2;
    rep(i, 2, k * 2 + 1) {
        int p = 0;
        rep(l, 1, k + 1) {
            int r = i - l;
            if (r > k || l > r)con;
            p++;
        }
        mint res = 0;
        rep(q, p + 1) {
            if (i % 2) {
                res += com(p, q) * p2[q] * nhr(k - 2 * p + q, n - q);
            } else {
                res += com(p - 1, q) * p2[q] * (nhr(k - 2 * p + 1 + q, n - q));
                res += com(p - 1, q) * p2[q] * (nhr(k - 2 * p + 1 + q, n - q - 1));
            }
        }
        cout << res << endl;
    }

}