CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)
title
題目
solution
先說很神仙的結論構造:對于aia_iai?,ai=vi?4pop_count(i)a_i=v_i*4^{pop\_count(i)}ai?=vi??4pop_count(i),bbb同理
ci=∑j∣k=iai?bjc_i=\sum_{j|k=i}a_i*b_jci?=∑j∣k=i?ai??bj?,則ansi≡ci4pop_count(i)mod4ans_i\equiv \frac{c_i}{4^{pop\_count(i)}}\mod 4ansi?≡4pop_count(i)ci??mod4
證明:pop_count(i)+pop_count(j)≥pop_count(i∣j)pop\_count(i)+pop\_count(j)\ge pop\_count(i|j)pop_count(i)+pop_count(j)≥pop_count(i∣j)
①i&j=0i\&j=0i&j=0,對答案將有貢獻
4pop_count(i)×4pop_count(j)4pop_count(i∣j)=1\frac{4^{pop\_count(i)}\times 4^{pop\_count(j)}}{4^{pop\_count(i|j)}}=14pop_count(i∣j)4pop_count(i)×4pop_count(j)?=1
②i&j≠0i\&j≠0i&j?=0,模444為000,無貢獻
4pop_count(i)×4pop_count(j)4pop_count(i∣j)=4x,x∈N?\frac{4^{pop\_count(i)}\times 4^{pop\_count(j)}}{4^{pop\_count(i|j)}}=4^x,x∈N^*4pop_count(i∣j)4pop_count(i)×4pop_count(j)?=4x,x∈N?
構造非常巧妙,一般來說是不可能自己想得出來的;這種結論都是難知道卻好證
o(╥﹏╥)o I’m so vegetable!
code
#include <cstdio> #define int long long #define maxn 2100000 int n, N; int a[maxn], b[maxn], c[maxn];void FWT_or( int *v, int opt ) {for( int i = 1;i < n;i <<= 1 )for( int j = 0;j < n;j += ( i << 1 ) )for( int k = 0;k < i;k ++ )v[j + k + i] += opt * v[j + k]; }signed main() {scanf( "%d", &N );n = 1 << N;for( int i = 0;i < n;i ++ ) scanf( "%1lld", &a[i] );for( int i = 0;i < n;i ++ ) scanf( "%1lld", &b[i] );for( int i = 0;i < n;i ++ ) a[i] <<= ( __builtin_popcount( i ) << 1 );for( int i = 0;i < n;i ++ ) b[i] <<= ( __builtin_popcount( i ) << 1 );FWT_or( a, 1 ), FWT_or( b, 1 );for( int i = 0;i < n;i ++ ) c[i] = a[i] * b[i];FWT_or( c, -1 );for( int i = 0;i < n;i ++ ) c[i] = c[i] >> ( __builtin_popcount( i ) << 1 ) & 3;for( int i = 0;i < n;i ++ ) printf( "%lld", c[i] );return 0; }總結
以上是生活随笔為你收集整理的CF1034E Little C Loves 3 III(神仙构造+FWT_OR卷积)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: test 7 3-22 2021省选模拟
- 下一篇: Excel教程 如何制作漏斗图