CodeForces 1332E Height All the Same
题意
对于一个\(n*m\)的矩阵,有两种操作
- 一个格子加二
- 一个格子和另一个相邻的格子同时加一
通过这两种操作最终使得所有矩阵元素相等
对于矩阵元素来说,有\(L\leq a_{i,j}\leq R(1\leq i\leq n,1\leq j\leq m)\)
问有多少种方案数,答案\(\mod 998244353\)
分析
由于最终相等的值与答案无关,所以我们不妨所有元素减去\(L\),即所有元素的值在\([0,R-L]\)区间内
而所有元素通过操作可以相差最多为\(1\)(仅仅分奇偶)
这种操作可以不断进行,所以我们只需看数字的奇偶性
为描述,我们不妨将所有元素视为\(0,1\)
对于\(1\)来说,其周围一定没有\(1\),否则可以填上使两元素变为\(0\),那么如果该\(1\)和旁边的\(0\)同时加\(1\),我们可以发现\(0\)和\(1\)互换位置了
这种操作的意义在于,对于任意的一个\(1\),我们可以通过操作使其变到其他任意的位置
那么如果矩阵中有奇数个\(1\),我们可以将其变为\(1\)个\(1\),而偶数个\(1\),我们一定可以将两个\(1\)进行配对,从而消去
我们思考\(n*m\)的奇偶性
- 若\(n*m\)为奇数,若有偶数个\(1\),则满足条件,若有奇数个\(1\),我们将其变为\(1\)个\(1\),并将其移动到边角上,通过蛇形配对,我们可以将除该元素的其他元素同时加上\(1\),所有元素相等,因此所有取值皆满足答案就是\((R-L+1)^{n*m}\)(每个数有\(R-L+1\)中取法)
- 若\(n*m\)为偶数,若有偶数个\(1\),则满足条件,若有奇数个\(1\),我们可以发现元素和为奇数,而\(n*m\)为偶数,元素和无论怎么增加(每次加二),一定是奇数,无法整除\(n*m\)一定不满足,因此答案为偶数个\(1\)的取值方式
接下来分析\(n*m\)为偶数时,有多少种偶数个\(1\)的取值方式:
如果\(R-L+1\)为奇数,则可以取\(\frac {R-L+2} {2}\)种奇数,否则为\(\frac {R-L+1} {2}\)种奇数,设为\(j\),设\(R-L+1\)为\(t\)
答案为\(C^0_{n*m}*j^0*(t-j)^{n*m}+C^2_{n*m}*j^2*(t-j)^{n*m-2}+\cdots+C^{n*m}_{n*m}*j^{n*m}*(t-j)^{0}\),意思为挑偶数(\(2*k\))个奇数(\(C^{2*k}_{n*m}\)),每个奇数有\(j\)中取值,其余偶数有\(t-j\)种取值
发现这个式子是二项展开式的偶数项,那么可以推导下(半小时无从下手,我对不起高中数学老师)
\]
\]
第二个式子偶数项是加号,奇数项是减号(从\(0\)开始计数)
两式相加除以二即为偶数项和,即
\]
#pragma GCC optimize(3, "Ofast", "inline")
#include <bits/stdc++.h>
#define start ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define ll long long
#define int ll
#define ls st<<1
#define rs st<<1|1
#define pii pair<int,int>
#define rep(z, x, y) for(int z=x;z<=y;++z)
#define com bool operator<(const node &b)
using namespace std;
const int maxn = (ll) 3e5 + 5;
const int mod = 998244353;
const int inf = 0x3f3f3f3f;
int qp(int x, int y) {
int ans = 1;
while (y) {
if (y & 1)
ans = ans * x % mod;
x = x * x % mod;
y >>= 1;
}
return ans;
}
signed main() {
start;
int n, m, L, R;
cin >> n >> m >> L >> R;
int t = R - L + 1;
if ((n * m) & 1) {
cout << qp(t, n * m) % mod;
} else {
int j;
if (t & 1)
j = (t + 1) / 2;
else
j = t / 2;
int ans = ((qp(t, m * n) + qp((2 * j - t), m * n)) % mod + mod) % mod * qp(2, mod - 2) % mod;
cout << ans;
}
return 0;
}
CodeForces 1332E Height All the Same的更多相关文章
- [PyData] 03 - Data Representation
Ref: http://blog.csdn.net/u013534498/article/details/51399035 如何在Python中实现这五类强大的概率分布 考虑下在mgrid上画二维概率 ...
- Educational Codeforces Round 97 (Rated for Div. 2) D. Minimal Height Tree (贪心)
题意:有一个从根节点\(BFS\)得来的序列(每次\(bfs\)子节点的时候保证是升序放入队列的),现在让你还原树(没必要和之前相同),问能构造出的最小的树的深度. 题解:不看根节点,我们从第二个位置 ...
- CodeForces 548D 单调栈
Mike and Feet Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Subm ...
- Codeforces Round #262 (Div. 2) 1003
Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...
- Codeforces Round #355 (Div. 2)-B
B. Vanya and Food Processor 题目链接:http://codeforces.com/contest/677/problem/B Vanya smashes potato in ...
- Codeforces Round #355 (Div. 2)-A
A. Vanya and Fence 题目连接:http://codeforces.com/contest/677/problem/A Vanya and his friends are walkin ...
- Codeforces Round #354 (Div. 2)-B
B. Pyramid of Glasses 题目链接:http://codeforces.com/contest/676/problem/B Mary has just graduated from ...
- Codeforces Round #292 (Div. 1) C. Drazil and Park 线段树
C. Drazil and Park 题目连接: http://codeforces.com/contest/516/problem/C Description Drazil is a monkey. ...
- [codeforces 241]C. Mirror Box
[codeforces 241]C. Mirror Box 试题描述 Mirror Box is a name of a popular game in the Iranian National Am ...
- CodeForces 471C MUH and House of Cards
MUH and House of Cards Time Limit:1000MS Memory Limit:262144KB 64bit IO Format:%I64d & % ...
随机推荐
- mysql安装教程【安装版】和Navicat-for-MySQL破解版
傻瓜式mysql安装教程[安装版]https://blog.csdn.net/qq_59636442/article/details/123058454 Navicat-for-MySQL下载链接:h ...
- 新版idea快捷键总结学习----(用于java开发模式)
选择代码区 ctrl w 如果放到以if开头的语句,可以选择if判断条件所在的代码片段 游标在单个单词下时 选择单词 在选中多个单词时,选择整个字符串 三次点击时,如果不在字符串单词下,用于选择{}内 ...
- 包含引用类型字段的自定义结构体,能作为map的key吗
1. 引言 在 Go 语言中,map是一种内置的数据类型,它提供了一种高效的方式来存储和检索数据.map是一种无序的键值对集合,其中每个键与一个值相关联.使用 map 数据结构可以快速地根据键找到对应 ...
- 拥抱jsx,开启vue3用法的另一种选择🔥🔥
背景 公司高级表单组件ProForm高阶组件都建立在jsx的运用配置上,项目在实践落地过程中积累了丰富的经验,也充分感受到了jsx语法的灵活便捷和可维护性强大,享受到了用其开发的乐趣,独乐乐不如众乐乐 ...
- List转为Map
List转为Map 1.业务需求,需要将List<SysSetting>转为Map SysSetting是一个对象 @Data @TableName("t_sys_setting ...
- Lucene检索全流程学习笔记
一 简介 写作目的 1 为什么学习Lucene lucene是基于倒排索引的检索工具库,倒排索引是典型的文本匹配,它能够精确匹配用户搜索的query,它的缺点是不擅长语义理解,而深度学习检索模型擅长的 ...
- 一文读懂什么是AIGC?
目录 AIGC概念 AIGC发展历史 在早期萌芽阶段(1950s~1990s) 在沉淀累积阶段(1990s~2010s) 在快速发展阶段(2010s~至今) ChatGPT AIGC能做什么? 电子商 ...
- Java 基础复习——StringBuffer 和 StringBuilder
StringBuffer 和 StringBuilder StringBuffer 类 简介 java.lang.StringBuffer 代表可变的字符序列,可以对字符串内容进行增删 很多方法和 S ...
- RabbitMQ升级过程以及问题解决
1.卸载MQ 如果安装过MQ需先彻底卸载ERlangOTP与rabbitMQ,卸载步骤如下 1. 停止RabbitMQ服务 2. 在控制面板中卸载Erlang与RabbitMQ 3. 删除C:\ ...
- sharding-jdbc分库连接数优化
一.背景: 配运平台组的快递订单履约中心(cp-eofc)及物流平台履约中心(jdl-uep-ofc)系统都使用了ShardingSphere生态的sharding-jdbc作为分库分表中间件, 整个 ...