Codeforces 1332 E. Height All the Same

在这里插入图片描述
在这里插入图片描述

题意:

一个 n ∗ m n*m nm 的网格图上的每个网格初始放有高度在 l   r l~r l r 范围内的立方体木块。你每次能在这个网格图中选择一个位置加上 2 2 2 个立方体木块,或者选择两个相邻位置各加上 1 1 1 个木块,询问有几种初始状态能够经过有限次操作是的所有位置的木块高度一致。

因为不论怎么操作,都是给现有的方块堆加上 2 2 2 个方块,因此奇偶性不变。我们假设初始最高的一堆木块高度为 h h h ,如果最终能够使得所有位置高度一致,则需要满足: ( n m k + ( n m h − ∑ p o s i j ) ) % 2 = 0 (nmk+(nmh−∑pos_{ij}))\%2=0 (nmk+(nmhposij))%2=0 ,其中 p o s i j pos_{ij} posij 指代网格图中位置为 ( i , j ) (i,j) (i,j) 的方块数。

不难发现如果 n m nm nm 为奇数,则上式必然能成立,则方案数为 ( r − l + 1 ) n m (r−l+1)nm (rl+1)nm ;若 n m nm nm 为偶数,则能否变成高度一致取决于 n m h − ∑ p o s i j nmh−∑pos_{ij} nmhposij 的奇偶性,又因为此时 n m nm nm 为偶数,因此初始的总方块数若为奇数就必定不行,我们减去初始方块数为奇数的情况即为答案。

AC代码:

const ll mod = 998244353;
ll n, m, l, r;
ll ans, res, tmp, inv;

int main()
{
	sldd(n, m);
	sldd(l, r);
	if (l == r)
	{
		puts("1");
		return 0;
	}
	if (n * m & 1)
	{
		ans = qpow(r - l + 1, n * m, mod);
		pld(ans);
		return 0;
	}
	inv = qpow(2, mod - 2, mod);
	res = (r - l + 1) / 2;
	tmp = (r - l + 1) - res;
	ans = (qpow(tmp + res, n * m, mod) + qpow(res - tmp, n * m, mod)) * inv % mod;
	pld(ans);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值