結果
| 問題 |
No.1772 Many DELETEQs
|
| ユーザー |
hitonanode
|
| 提出日時 | 2021-11-23 21:47:14 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,700 bytes |
| コンパイル時間 | 3,691 ms |
| コンパイル使用メモリ | 88,516 KB |
| 最終ジャッジ日時 | 2025-01-26 00:49:11 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 2 TLE * 3 |
ソースコード
// TLE
#include <cassert>
#include <iostream>
#include <map>
#include <utility>
#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(10000);
int main() {
cin.tie(nullptr);
ios::sync_with_stdio(false);
int Q;
cin >> Q;
map<pair<int, int>, int> cache;
while (Q--) {
int X, Y;
cin >> X >> Y;
if (X > Y) swap(X, Y);
if (cache.count(make_pair(X, Y))) {
cout << cache[make_pair(X, Y)] << '\n';
continue;
}
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;
}
cache[make_pair(X, Y)] = ret.val();
cout << ret.val() << '\n';
}
}
hitonanode