Codeforces Round #630 (Div. 2) E. Height All the Same (快速幂&思维)
思路:分奇偶性讨论。
-------1.若N * M为奇数肯定可以,
这N * M肯定是由偶数个+奇数个组成,不管是偶数个偶数还是偶数个奇数,偶数的一方都可以成对转化全部改变奇偶性,使所有格子奇偶性相同。
-------2.若N*M为奇数,又分两种情况:R-L+1是否为偶数。
------------第一种 .若为偶数,由于L-R中偶数和奇数的个数相同,使等价的,所以总和为偶数的方案等于总和为奇数的方案,由于我们只需要总和为偶数的方案,所以答案为(SUM)/2。
------------第二种.对于R-L+1为奇数的情况,不管是偶数比奇数多一个,还是奇数比偶数多一个,最后求和的方案数总是偶数比奇数多一个。(多的那一种是全部格子都为R-L+1的情况 偶数个乘上(R-L+1)和必为偶数,其他情况不会改变原有奇偶性,相当于在原来奇数个和偶数个相等的情况下 加了一个数)所以答案等于(SUM+1)/2。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=998244353;
ll ksm(ll a,ll n){
ll ans=1;
while(n){
if(n&1) ans=ans*a%mod;
a=a*a%mod;
n>>=1;
}
return ans;
}
int main(){
ll n,m,l,r;
cin>>n>>m>>l>>r;
ll k=r-l+1,ans;
if(n*m%2==1) ans=ksm(k,n*m);
else if(k%2==0) ans=ksm(k,n*m)*ksm(2,mod-2)%mod;
else ans=(ksm(k,n*m)+1)%mod*ksm(2,mod-2)%mod;
cout<<ans<<endl;
return 0;
}