Тема ссылка: Л Гу
Саи П.Б. руководители говорят, что это вопрос, который я чувствую себя немного тоже вентилятор. , , (Я все еще слишком слаб)
Во-первых, установить количество вхождений $ $ 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 }