CF1332E Height All the Same

考虑到可以在一个格子上码上两个方块,易得如果每个格子奇偶性相同,则一定可以到达同样高度。对于任意点对 \((x,y)\),我们可以通过找到一条路,路径上可以互达的两点有一边相邻,\(x\to b\to c\dots\to y\),每次增加相邻两个点,这样除了 \(x,y\) 各自加 \(1\),其余的点均加 \(2\),奇偶性不变。

所以,我们每次可以改变两个点的奇偶性。对于 \(nm\) 为奇数的情况,我们一定可以找到一种奇偶性的数有偶数个,每次修改一对为另一种奇偶性。也就是说,对于任意一种初始情况,均可以修改至完全相同。数量为 \((r-l+1)^{nm}\)。

对于 \(nm\) 为偶数的情况,只有奇偶数个数均为偶数时才满足要求。考虑枚举奇数数量方案数累加,运用乘法原理求出每种情况的方案数。我们先选位置,如果现在有 \(i\) 个奇数,则有 \(C_{nm}^{i}\) 种选法。设 \([l,r]\) 有 \(a\) 个奇数,\(b\) 个偶数,则奇数有 \(a^i\) 种方法,偶数有 \(b^{nm-i}\) 种选法。

\[\sum_{i=0,2\mid i}^{nm}C_{nm}^{i}a^ib^{nm-i}
\]

看到这个式子,容易联想到二项式定理。但是这个式子不好转化,需要转化为对于每一个 \(i\) 都有一个计算式。我们考虑用整体减去部分,可是还是不行。顺着这个思路,可以想到利用 \(-1\) 的幂构造摆动数列,当 \(i\) 为奇数时,\((-1)^i\) 刚好为负数,表示减去奇数项;当 \(i\) 为偶数时,\((-1)^i\) 为正数,尽管有重复计算,可是恰好答案中的每种情况算了两遍,最后除以 \(2\) 即可。

\[\frac{(r-l+1)^{nm}-\sum_{i=0}^{nm}(-1)^iC_{nm}^{i}a^ib^{nm-i}}{2}
\]

直接利用二项式定理进行转化,达到复杂度 \(O(\log(nm))\)。

\[\frac{(r-l+1)^{nm}-(b-a)^{nm}}{2}
\]
#include <bits/stdc++.h>
using namespace std;
long long n,m,l,r,mod=998244353;
long long power(long long a,long long p)
{
long long x=a,ans=1;
while(p)
{
if(p%2==1)ans=ans*x%mod;
p/=2;
x=x*x%mod;
}
return ans;
} int main()
{
scanf("%lld%lld%lld%lld",&n,&m,&l,&r);
if(n*m%2==1)printf("%lld",power(r-l+1,n*m));
else
{
long long a=(r-l+1)/2,b=0;
if((r-l+1)%2==1&&l%2==1)a++;
b=r-l+1-a;
printf("%lld",(power(r-l+1,n*m)+power((b-a+mod)%mod,n*m))%mod*499122177%mod);
}
return 0;
}

CF1332E Height All the Same 题解的更多相关文章

  1. POJ 3263 Tallest Cow 题解

    题目 FJ's \(N (1 ≤ N ≤ 10,000)\) cows conveniently indexed 1..N are standing in a line. Each cow has a ...

  2. LeetCode Binary Search Tree Iterator

    原题链接在这里:https://leetcode.com/problems/binary-search-tree-iterator/ Implement an iterator over a bina ...

  3. [PyData] 03 - Data Representation

    Ref: http://blog.csdn.net/u013534498/article/details/51399035 如何在Python中实现这五类强大的概率分布 考虑下在mgrid上画二维概率 ...

  4. CF1036A Function Height 题解

    Content 给定一个坐标系,在它的 \(x\) 轴上有 \(2n+1\) 个点 \(P_0,P_1,P_2,...,P_{2n}\),其中对于 \(0\leqslant i\leqslant 2n ...

  5. LeetCode Minimum Height Trees

    原题链接在这里:https://leetcode.com/problems/minimum-height-trees/ 题目: For a undirected graph with tree cha ...

  6. LeetCode OJ 题解

    博客搬至blog.csgrandeur.com,cnblogs不再更新. 新的题解会更新在新博客:http://blog.csgrandeur.com/2014/01/15/LeetCode-OJ-S ...

  7. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  8. 算法(第四版)C# 习题题解——3.1

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  9. 算法(第四版)C# 习题题解——2.5

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更方便的版本见:https ...

  10. 算法(第四版)C# 习题题解——2.3

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:http ...

随机推荐

  1. 常用的 JVM 配置参数有哪些?

    常用的 JVM 配置参数 JVM 配置参数可以用来控制 Java 程序的内存分配.垃圾回收.性能优化等.以下是一些常用的 JVM 配置参数: 1. 堆内存相关参数 -Xms:设置 JVM 初始堆内存大 ...

  2. php和thinkphp实现页面调转

    1.原生PHP https://www.cnblogs.com/jade640/p/7118565.html 2.thinkPHP跳转方法及重定向 https://blog.csdn.net/Wake ...

  3. macOS系统:新用户更新需谨慎‼️

    发个牢骚:macOS系统的更新频率真的是太快了,基本都是BUG修复.功能更新等等.每更新一次版本,偌大的安装包就要重新将各种格式安装包封装一次.小更新还好,大更新直接会影响到软件APP的使用,尤其是小 ...

  4. ElementUI默认样式修改

    修改ElementUI 样式的几种方式 新建全局样式表 新建 global.css 文件,并在 main.js 中引入. global.css 文件一般都放在 src->assets 静态资源文 ...

  5. 【MOOC】华中科技大学计算机组成原理慕课答案-第四章-存储系统(二)

    待整理. 单选 1 32位处理器的最大虚拟地址空间为 A. 2G B. 8G C. 16G √D. 4G 2 在虚存.内存之间进行地址变换时,功能部件 ( )将地址从虚拟(逻辑)地址空间映射到物理地址 ...

  6. 手把手教你使用C#创建一个WebSearchAgent

    PocketFlowSharp介绍 最近我对PocketFlow比较感兴趣,不仅是因为它是一个极简的LLM框架,更加让我觉得很不错的地方在于作者提供了很多方便学习的例子,就算没有LLM应用开发经验,也 ...

  7. Mac玩家的武侠梦:燕云十六声全平台运行保姆级教程

    M系列Mac凭借Apple Silicon芯片的强劲性能,已实现燕云十六声等大型手游的原生运行.通过开源工具PlayCover,开发者社区成功打通武侠动作游戏的跨平台壁垒,让玩家在Mac设备上感受沉浸 ...

  8. codeup之等腰梯形

    Description 请输入高度h,输入一个高为h,上底边长为h 的等腰梯形(例如h=4,图形如下). **** ****** ******** ********** Input 输入第一行表示样例 ...

  9. Longest Univalue Path——LeetCode进阶路

    原题链接https://leetcode.com/problems/longest-univalue-path 题目描述 Given a binary tree, find the length of ...

  10. Manim动画渲染:从代码到屏幕的幕后故事

    Manim是一个强大的动画制作库,它能够将简单的Python代码转化为精美的动画视频. 你是否好奇过,当你运行Manim代码时,背后的魔法是如何发生的呢? 今天,将重点介绍渲染过程中的三个关键步骤:S ...