結果
| 問題 |
No.1503 Bitwise And Convolution Twisted
|
| コンテスト | |
| ユーザー |
noshi91
|
| 提出日時 | 2020-12-31 22:53:34 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 346 ms / 2,000 ms |
| コード長 | 1,120 bytes |
| コンパイル時間 | 735 ms |
| コンパイル使用メモリ | 73,796 KB |
| 最終ジャッジ日時 | 2025-01-17 08:48:21 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 9 |
ソースコード
#include <cstddef>
#include <cstdint>
#include <iostream>
#include <vector>
using usize = std::size_t;
using i64 = std::int64_t;
template <class F> void kronecker(const F f, std::vector<i64> &a) {
const usize n = a.size();
for (usize w = 1; w != n; w *= 2) {
for (usize k = 0; k != n; k += w * 2) {
for (usize i = 0; i != w; ++i) {
f(a[k + i], a[k + w + i]);
}
}
}
}
static constexpr i64 MOD = 998244353;
i64 mod(i64 x) {
x %= MOD;
if (x < 0) {
x += MOD;
}
return x;
}
int main() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
usize N;
std::cin >> N;
const usize m = 1 << N;
std::vector<i64> A(m), B(m);
for (i64 &e : A) {
std::cin >> e;
}
for (i64 &e : B) {
std::cin >> e;
}
kronecker([](i64 &l, i64 &r) { l += r; }, A);
kronecker([](i64 &l, i64 &r) { r -= l; }, B);
std::vector<i64> C(m);
for (usize i = 0; i != m; ++i) {
C[i] = mod(mod(A[i]) * mod(B[i]));
}
kronecker([](i64 &l, i64 &r) { r += l; }, C);
for (usize i = 0; i != m; ++i) {
std::cout << mod(C[i]) << " \n"[i + 1 == m];
}
return 0;
}
noshi91