[Перл] [CTS2019 производящей функция, биномиальная инверсия]

Тема ссылка: Л Гу


Саи П.Б. руководители говорят, что это вопрос, который я чувствую себя немного тоже вентилятор. , , (Я все еще слишком слаб)

Во-первых, установить количество вхождений $ $ I $ $ a_i раз в последовательности, она требует $ \ sum_ {I = 1} ^ D [a_i \ мод \ 2] \ Leq н-2m $

Если вы хотите , чтобы непосредственно вычислить $ \ Leq п-ет сумму $ будет очень хлопотно, поэтому рассмотреть возможность $ g_i $ выразить только появились $ I $ схемы нечетного и.

Это все еще слишком много проблем, мы рассмотрим использование инверсии или включения-исключения по $ \ GEQ я $ число точно выяснить , равное числу $ I $, предполагая $ F_i $ выразить по крайней мере , $ I $ появляется нечетное число программ.

Это происходит потому, что число перестановок задачи, рассмотрит производящую функцию так, что использование экспоненциального типа.

$$ \ начать {выравнивать *} f_k & = [х ^ п] п \ БИНОМ {D} {k} (\ гидроразрыва {е ^ х ^ {- х}} {2})! ^ К (е ^ х) ^ {Dk} \\ & = [х ^ п] \ гидроразрыва {2 ^ к} \ БИНОМ {D} {K} (е ^ х ^ {- х}) {п!} ^ ке ^ {(Dk) х} \ конец {выравнивать *} $$

Порция передних коэффициентов не может игнорировать, непосредственно за участком настороже полинома.

$$ \ {начинают выравнивать *} & (е ^ х ^ {- х}) ^ ке ^ {(Dk)} х [х ^ п] \\ = & \ sum_ {г = 0} ^ к \ БИНОМ {к } {г} е ^ {ие} е ^ {- (ки)} х (- 1) ^ {ки} е ^ {(Dk)} х [х ^ п] \\ = & \ sum_ {г = 0} ^ к \ БИНОМ {к} {г} е ^ {(2i + D-2k) х} (- 1) ^ {ки} [х ^ п] \\ = & \ sum_ {г = 0} ^ к \ Binom {к} {г} е ^ {(D-2i)} х (- 1) ^ {ки} [х ^ п] = \\ & \ гидроразрыва {1} {!} п \ sum_ {г = 0} ^ к \ БИНОМ {к} {I} (- 1) ^ я (D-2i) ^ п \ конец {выравнивать *} $$

$$ f_k = \ гидроразрыва {D!} {2 ^ к (Dk)!} \ Sum_ {я = 0} ^ к \ гидроразрыва {(- 1) ^ я (D-2i) ^ п} {!} Я * \ гидроразрыва {1} {(ки)!} $$

Может быть вычислена свертка $ $ O (D \ журнал D).

$ G_k $ вычисляются с использованием биномиальной инверсии, инверсии знакомых биномиальных студентов могут знать, на самом деле, является применением бинома обратной функции экспоненциального производящей.
$$ f_i = \ sum_ {j = я} ^ п \ БИНОМ {J} {г} £ _х \ Rightarrow g_i = \ гидроразрыва {1} \ sum_ {j = к} ^ п \ гидроразрыва {({я!} - 1 ) ^ {ц}} {( джи)!} * (f_j * J!) $$

$$ ANS = \ sum_ {г = 0} ^ {п-2m} g_i $$

Временная сложность $ O (D \ журнал D) $

1 #include <. Бит / STDC ++ H>
 2  #define Ринт регистр INT
 3 с  использованием  пространства имен STD;
4 ЬурейеЕ длинные  длинные Л.Л.;
5  Const  INT N = 800003 , моды = 998244353 , г = 3 , г = 332748118 ;
6 рядный INT Kasumi ( Int а, INT б) {
 7      INT Рез = 1 ;
8 ,      а (б) {
 9 ,          если (б & 1) RES = (LL) Рез * а% мод;
10          а = (МР) а * а% по модулю;
11          б >> = 1 ;
12      }
 13      возврата разрешения;
14  }
 15  INT FAC [N], INV [N], invfac [N], ANS;
16 инлайн недействительными инициализации ( INT п) {
 17      FAC [ 0 ] = 1 ;
18      для (Ринт я = 1 ; г <= п; я ++) FAC [I] = (LL) FAC [я - 1 ] * я% по модулю;
19      invfac [п] = Kasumi (FAC [п], мод - 2);
20      для (Ринт I = N; I; я - ) {
 21          invfac [я - 1 ] = (LL) я * invfac [я]% по модулю;
22          INV [I] = (LL) invfac [я] * FAC [я - 1 ]% мод;
23      }
 24  }
 25  INT числа оборотов [N];
26 инлайн INT calrev ( INT п) {
 27      INT предел = 1 , L = - 1 ;
28 в      то время как (предел <= п) {предел << = 1 ; L ++ ;}
 29      для (Ринта я = 0; я <предел, я ++ )
 30          изм [я] = (оборотов [I >> 1 ] >> 1 ) | ((я & 1 ) << л);
31      обратного предела;
32  }
 33 инлайн аннулируются НТТЫ ( INT * A, INT предел, INT типа) {
 34      для (Ринта я = 0 ; г <предел; я ++ )
 35 ,          если (я < обороты [I]) своп (A [I] , А [об [I]]);
36      для (Rint середины = 1 ; <середины предела; середины << = 1 ) {
 37          INTWn = Kasumi (тип == 1 г: г, (мод - 1 ) / (середина << 1 ));
38          для (Rint J = 0 , J <предел; J + = (середина << 1 )) {
 39              INT ш = 1 ;
40              для (Ринт к = 0 ; к <середина; K ++ ш = (LL) ш * Wn% мода) {
 41                  INT х = А [J + K], у = (LL) ш * A [J + к + середина]% по модулю;
42                  А [J + K] = (х + у)% по модулю;
43                  А [J + K + середина] = (х - у + мод)% по модулю;
44              }
 45         }
 46      }
 47 ,      если (тип == - 1 ) {
 48          INT INV = Kasumi (предел, мод - 2 );
49          для (Ринт я = 0 ; г <предел; я ++) А [I] = (LL) А [я] * INV% по модулю;
50      }
 51  }
 52  INT D, N, M, F [N] G [N];
53  INT основных () {
 54      зсапЕ ( " % d% d% d " , & D, & п, & м);
55 ,      если (п < 2 * м) {
 56          Е ( " 0" );
 57          возврата  0 ;
 58      }
 59 ,      если (D <= п - 2 * м) {
 60          Е ( " % d " , Касуми (D, N));
 61          возврат  0 ;
 62      }
 63      инициализации (D);
 64      для (Ринт я = 0 ; г <= D; я ++ ) {
 65          Р [I] = (LL) Kasumi ((D - 2 * я + MOD)% мод, п) * invfac [я]% мод ;
 66 ,          если (я & 1 ) Р [I] = мод - Р [I];
 67         G [I] = invfac [I];
68      }
 69      INT предел = calrev (D << 1 );
70      НТТ (F, предел, 1 ); НТТ (G, предел, 1 );
71      для (Ринт г = 0 ; г <предел; я ++) Р [I] = (МР) Р [I] * G [I]% по модулю;
72      НТТ (F, предел, - 1 );
73      для (Ринт г = 0 ; г <предел; я ++) G [I] = 0 ;
74      для (Ринт я = D + 1 ; г <предел; я ++) Р [I] = 0 ;
75      для (Ринт я =0 ; г <= D; я ++ ) {
 76          Р [I] = (МР) Р [I] * FAC [я]% мод * FAC [D] , % мод * Касуми ( 2 , мод - 1 - я) % мод * invfac [D - я]% по модулю;
77          G [D - I] = (я & 1 )? (мод - invfac [I]): invfac [I];
78      }
 79      НТТ (F, предел, 1 ); НТТ (G, предел, 1 );
80      для (Ринт г = 0 ; г <предел; я ++) Р [I] = (МР) Р [I] * G [I]% по модулю;
81      НТТ (F, предел, - 1 );
82      для (Ринт я = 0 ; г <= п -2 * м; я ++) ANS = (ANS + (МР) Р [I + D] * invfac [я]% по модулю)% по модулю;
83      Е ( " % d " , ANS);
84 }
Luogu5401

рекомендация

отwww.cnblogs.com/AThousandMoons/p/10956769.html
рекомендация