結果
問題 | No.1958 Bit Game |
ユーザー |
![]() |
提出日時 | 2022-05-27 21:50:51 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 319 ms / 2,000 ms |
コード長 | 1,789 bytes |
コンパイル時間 | 1,962 ms |
コンパイル使用メモリ | 201,936 KB |
最終ジャッジ日時 | 2025-01-29 15:55:46 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
#include <bits/stdc++.h>#include <atcoder/modint>using namespace std;using namespace atcoder;using mint = modint998244353;int main() {int n, x, y;cin >> n >> x >> y;vector<int> a(x), b(y);for (int i = 0; i < x; i++) {cin >> a.at(i);}for (int i = 0; i < y; i++) {cin >> b.at(i);}vector<mint> cx0(18), cx1(18), cy0(18), cy1(18);for (int i = 0; i < x; i++) {for (int j = 0; j < 18; j++) {if (a.at(i) >> j & 1) {cx1.at(j)++;} else {cx0.at(j)++;}}}for (int i = 0; i < y; i++) {for (int j = 0; j < 18; j++) {if (b.at(i) >> j & 1) {cy1.at(j)++;} else {cy0.at(j)++;}}}vector<mint> cp0(18, 1), cp1(18);for (int i = 0; i < 2 * n; i++) {vector<mint> cp0_new(18), cp1_new(18);if (i % 2 == 0) {for (int j = 0; j < 18; j++) {cp0_new.at(j) += cp0.at(j) * cx0.at(j);cp1_new.at(j) += cp0.at(j) * cx1.at(j);cp1_new.at(j) += cp1.at(j) * cx0.at(j);cp1_new.at(j) += cp1.at(j) * cx1.at(j);}} else {for (int j = 0; j < 18; j++) {cp0_new.at(j) += cp0.at(j) * cy0.at(j);cp0_new.at(j) += cp0.at(j) * cy1.at(j);cp0_new.at(j) += cp1.at(j) * cy0.at(j);cp1_new.at(j) += cp1.at(j) * cy1.at(j);}}swap(cp0, cp0_new);swap(cp1, cp1_new);}mint ans = 0;for (int i = 18 - 1; i >= 0; i--) {ans *= 2;ans += cp1.at(i);}cout << ans.val() << endl;return 0;}