library_checker/convolution/
bitwise_and_convolution.rs1use competitive::prelude::*;
2use competitive::{
3 algebra::AddMulOperation,
4 math::{BitwiseandConvolve, BitwiseorConvolve, ConvolveSteps},
5 num::montgomery::MInt998244353 as M,
6};
7
8#[verify::library_checker("bitwise_and_convolution")]
9pub fn bitwise_and_convolution(reader: impl Read, writer: impl Write) {
10 prepare_io!(reader, writer);
11 sc!(n, a: [M; 1 << n], b: [M; 1 << n]);
12 let c = BitwiseandConvolve::<AddMulOperation<_>>::convolve(a, b);
13 pp!(@it c);
14}
15
16#[verify::library_checker("bitwise_and_convolution")]
17pub fn bitwise_or_convolution(reader: impl Read, writer: impl Write) {
18 prepare_io!(reader, writer);
19 sc!(n, mut a: [M; 1 << n], mut b: [M; 1 << n]);
20 a.reverse();
21 b.reverse();
22 let mut c = BitwiseorConvolve::<AddMulOperation<_>>::convolve(a, b);
23 c.reverse();
24 pp!(@it c);
25}