随笔 - 216,  文章 - 0,  评论 - 17,  阅读 - 25368

比赛链接:

https://codeforces.com/contest/1332

E. Height All the Same

题目大意:

nm 的矩形区域内,每个点上的高度处在 [l,r],有两种操作:
操作 1,选择一个位置 (i,j),让该位置高度 + 2。
操作 2,选择两个相邻的位置,两个位置高度都 + 1。
问有多少种情况,通过若干次操作后可以让最后的高度相同。

思路:

奇偶性考虑,操作 1 不改变一个位置高度的奇偶性,操作 2 让两个相邻的位置奇偶性改变。
设区域内高度为奇数个的有 odd 个,偶数个的有 even 个。
如果 nm 是奇数的话,显然,oddeven 的奇偶性一定不同,那就可以通过操作 2 让奇偶性转化,所以所有情况都是可以的,答案为 (rl+1)nm
如果 nm 是偶数的话,oddeven 都是奇数的时候是没办法相互转化的,所以两个都要是偶数的情况, [l,r] 中奇数有 x 个,偶数有 y 个,所有的组合就是 i=0,2,4,...nCnmixiynmi
这个式子就是二项式定理中偶数项的和,所以转化为 (x+y)nm+(xy)nm2

代码:

#include <bits/stdc++.h>
using namespace std;
#define LL long long
const int mod = 998244353;
LL n, m, l, r;
LL qp(LL a, LL k, LL p){
	LL ans = 1;
	while (k){
		if (k & 1) ans = ans * a % p;
		k >>= 1;
		a = a * a % p;
	}
	return ans;
}
int main(){
	cin >> n >> m >> l >> r;
	if (n * m % 2 == 1) cout << qp(r - l + 1, n * m, mod) << "\n";
	else{
		LL y = r / 2 - (l - 1) / 2, x = (r - l + 1) - even;
		cout << ( qp(x + y, n * m, mod) + qp(x - y, n * m, mod) ) % mod * qp(2, mod - 2, mod) % mod << "\n";
	}
	return 0;
}
posted on   Hamine  阅读(24)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示