LOJ # 3119 "CTS2019 |. CTSC2019" Бином случайных кубы подсчет инверсии +

Бог хороший вопрос он рассчитывает. 

код: 

# 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; 
}    

  

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

отwww.cnblogs.com/guangheli/p/12375015.html