結果
| 問題 | No.1771 A DELETEQ |
| コンテスト | |
| ユーザー |
hitonanode
|
| 提出日時 | 2021-11-23 10:13:53 |
| 言語 | C++23 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 89 ms / 3,500 ms |
| コード長 | 1,245 bytes |
| コンパイル時間 | 950 ms |
| コンパイル使用メモリ | 96,408 KB |
| 実行使用メモリ | 11,148 KB |
| 最終ジャッジ日時 | 2024-07-03 21:09:32 |
| 合計ジャッジ時間 | 5,815 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 27 RE * 11 |
ソースコード
#include <cassert>
#include <iostream>
#include <vector>
using namespace std;
#include <atcoder/modint>
using mint = atcoder::modint998244353;
template <typename modint> struct acl_fac {
std::vector<modint> facs, facinvs;
acl_fac(int N) {
assert(-1 <= N and N < modint::mod());
facs.resize(N + 1, 1);
for (int i = 1; i <= N; i++) facs[i] = facs[i - 1] * i;
facinvs.assign(N + 1, facs.back().inv());
for (int i = N; i > 0; i--) facinvs[i - 1] = facinvs[i] * i;
}
modint ncr(int n, int r) const {
if (n < 0 or r < 0 or n < r) return 0;
return facs[n] * facinvs[r] * facinvs[n - r];
}
modint operator[](int i) const { return facs[i]; }
modint finv(int i) const { return facinvs[i]; }
};
acl_fac<mint> fac(1000000);
int main() {
int X, Y;
cin >> X >> Y;
if (X > Y) swap(X, Y);
int K = Y - X;
mint ret = 0;
mint pow2 = 1; // 2^i
for (int i = 0; i <= X; ++i) { // i: (# of AA) + (# of BB)
for (int j = 0; i + j <= X; ++j) { // j: (# of AB)
int k = j + K; // k: (# of BA)
ret += fac.ncr(i + j + k, i) * fac.ncr(j + k, j) * pow2;
}
pow2 *= 2;
}
cout << ret.val() << '\n';
}
hitonanode