Codeforces Round #630 (Div. 2) E. Height All the Same (快速幂&思维)

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;
}
发布了63 篇原创文章 · 获赞 49 · 访问量 2868

猜你喜欢

转载自blog.csdn.net/weixin_45750972/article/details/105248506