BZOJ4589:ハードニム

FWTテンプレートのタイトル。

1つの#include <ビット/ STDC ++ H>
 2  使用して 名前空間STDを、
3  の#defineは長い長いLL
 4  の#define MOD十億七
 5  の#define(; iが=(y)を<++ iはi =(X)INT)のための担当者(I、x、y)は
 6  の#define DREP(I、X 、y)のための式(I =(X INT); I> =(Y); - I)
 7インラインint型リード(){
 8      チャー CH = GETCHAR()。INT X = 0、F = 1 9      一方(CH < ' 0 ' || CH> ' 9 ' ){
 10          もし(CH == ' - ')、F = - 1 11          CH = GETCHAR()。
12      }
 13      ながら' 0 ' <= CH && CH <= ' 9 ' ){
 14          、X = X * 10 + CH- ' 0 ' 15          CH = GETCHAR()。
16      }
 17      リターンのx *のF。
18  }
 19インラインINT電源(int型のx、int型のY){
 20     int型 RET = 1 ;
21      一方、(Y){
 22          であれば(Y&1)RET = 1LL * RET * X%MOD。
23          X = 1LL * X * X%MOD。Y >> = 1 24      }
 25      リターンRET。
26  }
 27インラインボイド FWT_xor(INT *、int型 N、int型のOP)を{
 28      INT INV2 =(MOD + 1)/ 2 29      のためにINT D = 1; D <N。D << = 1 ){
 30          のためのint型 i = 0 ; iがNを<; I + =(D << 1 )){
 31              のためのint型 J = 0 ; J <D; ++ j)は{
 32                  INT X = [I jの+]、Yは[IがJ + + D]を。
33                  [I jの+] =(X + Y)%MOD。
34                  [IがJ + Dを+] =(X + MOD - Y)%MOD。
35                  場合(OP == - 1 ){
 36                      [iがjは+] = 1LL *%INV2 * [iがjで+] MOD。
37                     * * [iがJ + Dを+] INV2%= 1LL [iがJ + Dを+] MODします。
38                  }
 39              }
 40          }
 41      }
 42  }
 43  INT [ 200010 ]。
44  INT PRI [ 200010 ]、TOT。
45  BOOL VIS [ 200010 ]。
46インラインボイドのinit(){
 47      のためのint型 I = 2 ; I <= 50000 ; ++ i)が{
 48          であれば(!VIS [I]){
49              PRI [++ TOT] = I;
50              のためのint型 ; J <= jが=私を+ 50000 ; J + = I){
 51                  VIS [J] = 1 52              }
 53          }
 54      }
 55  }
 56  INT メイン(){
 57      のint N、M。
58      のinit();
59      一方(scanf関数(" %D%dの"、&​​N、&M)=!EOF){
 60          INT N。
61          のための(N = 1; N <= M。N << = 1 )。
62          のためにint型 I = 0 ; iがNを<; ++ i)は[I] = 0 63          のためにint型 I = 1 ; I <= TOT; ++ I){
 64              であれば(PRI [i]が> M)ブレーク65              [PRI [I] = 1 66          }
 67          FWT_xor(N、1 )。
68          のためにint型 I = 0 ; iがNを<; ++ i)が{
 69              [I] = 電力([I]、N)。
70          }
 71          FWT_xor(N - 1 )。
72          のprintf(" %d個の\ n "、[ 0 ])。
73      }
 74 }

 

おすすめ

転載: www.cnblogs.com/iamqzh233/p/11111693.html