比赛链接:
https://codeforces.com/contest/1332
E. Height All the Same
题目大意:
的矩形区域内,每个点上的高度处在 ,有两种操作:
操作 1,选择一个位置 ,让该位置高度 + 2。
操作 2,选择两个相邻的位置,两个位置高度都 + 1。
问有多少种情况,通过若干次操作后可以让最后的高度相同。
思路:
从奇偶性考虑,操作 1 不改变一个位置高度的奇偶性,操作 2 让两个相邻的位置奇偶性改变。
设区域内高度为奇数个的有 个,偶数个的有 个。
如果 是奇数的话,显然, 和 的奇偶性一定不同,那就可以通过操作 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;
}
分类:
math
, 练习赛-codeforces
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!