結果
問題 | No.1503 Bitwise And Convolution Twisted |
ユーザー | noshi91 |
提出日時 | 2020-12-31 22:53:34 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 354 ms / 2,000 ms |
コード長 | 1,120 bytes |
コンパイル時間 | 1,025 ms |
コンパイル使用メモリ | 76,504 KB |
実行使用メモリ | 27,776 KB |
最終ジャッジ日時 | 2024-11-14 13:07:25 |
合計ジャッジ時間 | 7,737 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 2 ms
5,248 KB |
testcase_02 | AC | 2 ms
5,248 KB |
testcase_03 | AC | 2 ms
5,248 KB |
testcase_04 | AC | 2 ms
5,248 KB |
testcase_05 | AC | 2 ms
5,248 KB |
testcase_06 | AC | 8 ms
5,248 KB |
testcase_07 | AC | 91 ms
9,344 KB |
testcase_08 | AC | 7 ms
5,248 KB |
testcase_09 | AC | 354 ms
27,776 KB |
testcase_10 | AC | 353 ms
27,776 KB |
testcase_11 | AC | 351 ms
27,776 KB |
ソースコード
#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; }