Бог хороший вопрос он рассчитывает.
код:
# include <cstdio> #include <алгоритм> #include <CString> #define N 5000003 #define LL долго долго #define моды 998244353 #define setIO (ы) freopen (ы ".В", "R", стандартный ввод) с использованием пространства имен станд; INT INVG [N], дп [N], F [N], FAC [N], INV [N]; LL г [Н]; INT qpow (целое х, Int у) { INT TMP = 1; (для; Y; Y >> = 1, х = (LL) х * х% по модулю) , если (у & 1) = TMP (LL) TMP * х% по модулю; вернуться TMP; } INT C (целое х, у INT) { возвращение (LL) FAC [х] * INV [у]% мод * INV [х]% по модулю; } INT INV (целое х) {возвращение qpow (х, мод-2); } Недействительным решения () { Int N, M, L, ми, КТИ, зсапЕ ( "% d% d% d% d", & п, & м, & л, & KTH); миль = мин (мин (п, т), л); если (КТИ> мили) {Е ( "0 \ п"); возвращение ; } LL TOT = 1LL * п * т% мод * л% мод, в = 1LL; г [0] = TOT% по модулю; для (I = 1; я <= т; ++ я) { г [г] = (TOT-1LL * (п) * (миль)% мод * (Li) +% по модулю мод)% мод; в = в * г [I]% по модулю; } INVG [ми] = qpow (в обр-2); для (I = 1-ми; я> = 0; - я) INVG [I] = (LL) INVG [+ 1] * г [г + 1]% по модулю; (ANS + = (LL) д * С (я, KTH)% мод * дп [я]% по модулю) =% по модулю; F [0] = 1; для (I = 0; я <мили; ++ я) П [+ 1] = (LL) F [I] * (п)% мод * (миль)% мод * (Li)% мод; для (I = 0; я <= т; ++ я) дп [I] = (LL) F [I] * INVG [I]% по модулю; INT ANS = 0; для (я = KTH; я <= т; ++ я) { INT d = ((я-KTH) & 1) (мод-1): 1; Е ( "% d \ п", ANS); } Недействительными инициализации () { FAC [0] = 1; для (INT I = 1; I <N; я ++) FAC [I] = (LL) FAC [I-1] * я% по модулю; INV [N-1] = qpow (FAC [N-1], мод-2); для (INT I = N-2; я> = 0; i--) INV [I] = (LL) INV [+ 1] * (г + 1)% по модулю; } Int основных () { // setIO ( "вход"); в этом(); Int I, J, T; зсапЕ ( "% d", & T); в то время как (T--) решают (); возвращать 0; }