码迷,mamicode.com
首页 > 其他好文 > 详细

组合数学——cf1332E

时间:2020-04-02 22:48:07      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:如何   style   ||   组合数   fine   out   nbsp   eve   c++   

/*
结论:可以同时改变任意两个块的奇偶性
所以如果n*m是奇数,那么初始状态无论如何设置都可以
n*m是偶数: 初始状态必须有偶数个偶数|偶数个奇数,求的时候用二项式反演一下即可 
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long 
#define mod 998244353
ll Pow(ll a,ll b){
    ll res=1;
    while(b){
        if(b%2)res=res*a%mod;
        b>>=1;a=a*a%mod;
    }
    return res;
}
int main(){
    ll n,m,L,R;
    cin>>n>>m>>L>>R;
    if(n*m%2==0){
        ll ans=0,odd,even;
        if(L%2==0){
            odd=(R-L+1)/2;
            even=R-L+1-odd;
        }else {
            even=(R-L+1)/2;
            odd=R-L+1-even;
        }
        if(odd==0 || even==0)ans=1;
        else { 
            ll sum=Pow(odd+even,n*m);
            ll dif=Pow(odd-even,n*m);
            ans=(sum+dif)*Pow(2,mod-2)%mod;
        }
        cout<<ans<<\n;
    }else {
        cout<<Pow(R-L+1,n*m)<<\n;
    }
} 

 

组合数学——cf1332E

标签:如何   style   ||   组合数   fine   out   nbsp   eve   c++   

原文地址:https://www.cnblogs.com/zsben991126/p/12623093.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!