ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Codeforces Round #630 (Div. 2)

2022-05-13 01:33:14  阅读:149  来源: 互联网

标签:630 奇数 LL 奇偶性 Codeforces 偶数 ans 操作 Div


比赛链接:

https://codeforces.com/contest/1332

E. Height All the Same

题目大意:

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

思路:

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

代码:

#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;
}

标签:630,奇数,LL,奇偶性,Codeforces,偶数,ans,操作,Div
来源: https://www.cnblogs.com/Hamine/p/16265184.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有