首页 > 其他分享 >31. CF-Height All the Same

31. CF-Height All the Same

时间:2023-01-16 23:57:13浏览次数:55  
标签:格子 31 mn CF Same ret ll 方块 mod

题目链接

有一个 \(m\times n\) 大小的网格,每个格子上都堆放了一些 \(1\times 1\times 1\) 的单位立方体,每个格子里堆放的立方体数量都在 \([l,r]\) 内。现在可以对这些网格施加两种操作:

  1. 指定一个格子,在上面新加两个方块
  2. 指定两个相邻的格子,在上面各添加一个方块

操作的次数是没有限制的,并且结束的时候方块的高度也没有限制。问这个存在多少种初始状态,可以在有限次操作后做到所有格子上的方块高度都一样。

首先要知道怎么样的初始状态是可以被弄平整的。操作一可以让所有奇偶性相同的格子变成同一高度,操作二可以让两个格子的奇偶性同时变化。显然,只有高度为奇数的格子与高度为偶数的格子的数量均为奇数的时候,这样的初始状态才是没法达到同一高度的。

所以 \(mn\) 是奇数的时候,答案就是 \((r-l+1)^{mn}\),而 \(mn\) 是偶数的时候答案是:

\[\sum_{i=0}^{mn}\binom{mn}{i}O^{i}E^{mn-i}[i\equiv 0\pmod 2] \]

其中 \(O,E\) 表示 \([l,r]\) 内奇数的数量和偶数的数量。

这个式子的形式很容易让人联想到二项式定理,只需要将 \((O+E)^{mn}\) 展开式中指数是偶数的项取出来就行了。这也是一个十分常见的小技巧,将这个式子与 \((O-E)^{mn}\) 加起来就可以抵消掉那些不需要的项。在这个问题中,容易发现 \(|O-E|\in\lbrace 0,1\rbrace\),甚至连快速幂都不需要用。

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll mod = 998244353;
ll qpow(ll b, ll k) {
    b %= mod;
    ll ret = 1;
    while (k) {
        if (k & 1)
            ret = ret * b % mod;
        b = b * b % mod;
        k >>= 1;
    }
    return ret;
}
ll n, m, l, r;
int main(int argc, char **argv) {
    cin >> n >> m >> l >> r;
    ll ans = qpow(r - l + 1, n * m);
    if (n * m % 2 == 0) {
        ans = (ans + (r - l + 1) % 2) * qpow(2, mod - 2) % mod;
    }
    cout << ans << endl;
    return 0;
}

标签:格子,31,mn,CF,Same,ret,ll,方块,mod
From: https://www.cnblogs.com/theophania/p/p31.html

相关文章

  • CF 1779C Least Prefix Sum 题解
    CF链接:LeastPrefixSumLuogu链接:Least PrefixSum${\scr\color{CornflowerBlue}{\text{Solution}}}$先来解释一下题意:给定一个数组,问最少把多少个数变成相反数,......
  • CF1775F Laboratory on Pluto - dp - 构造 -
    题目链接:https://codeforces.com/contest/1775/problem/F题解:首先考虑第一问考虑将答案的图形补成一个矩形显然出现凹槽不优,因此可以看成一个矩阵去掉几个角之后的图形......
  • Codeforces Round #844 (Div.1 + Div.2) CF 1782 A~F 题解
    点我看题A.ParallelProjection我们其实是要在这个矩形的边界上找一个点(x,y),使得(a,b)到(x,y)的曼哈顿距离和(f,g)到(x,y)的曼哈顿距离之和最小,求出最小值之后加h就是......
  • Codeforces Round #844 (Div.1 + Div.2) CF 1782 A~F 题解
    点我看题A.ParallelProjection我们其实是要在这个矩形的边界上找一个点(x,y),使得(a,b)到(x,y)的曼哈顿距离和(f,g)到(x,y)的曼哈顿距离之和最小,求出最小值之后加h就是......
  • Codeforces Round #844 (Div.1 + Div.2) CF 1782 A~F 题解
    点我看题A.ParallelProjection我们其实是要在这个矩形的边界上找一个点(x,y),使得(a,b)到(x,y)的曼哈顿距离和(f,g)到(x,y)的曼哈顿距离之和最小,求出最小值之后加h就是......
  • CF1039D You Are Given a Tree
    YouAreGivenaTreeLuoguCF1039DCodeforcesCF1039D题面翻译有一棵\(n\)个节点的树。其中一个简单路径的集合被称为\(k\)合法当且仅当:树的每个节点至多属于其......
  • CF1133B 题解
    原题链接这道题其实很简单要让两数和为\(k\)的倍数,需要满足以下两条件之一:两数都是\(k\)的倍数两数的余数和为\(k\)因此,我们可以先统计出余数再按上述条......
  • 30. CF-Hamiltonian Spanning Tree
    题目链接给出一个点数为\(n\)的无向完全图,所有边的长度均为\(y\),然后指定该图的一个生成树,将树中的长度改为\(x\),求该图最短的哈密顿路径的长度。先分类讨论,对于\(x......
  • CF1536F. Omkar and Akmar
    牛B题首先因为n>=2,可以发现后手必胜:①当n为偶数时,后手跟着先手走对称,按照n和1的分界线作为对称轴,位置对称+棋子反转②当n为奇数时,设先手走x,后手走x+2,按照x+1作为对称......
  • CF构造题1600-1800(2)
    H.HotBlackHotWhite(COMPFEST14-PreliminaryOnlineMirror(Unrated,ICPCRules,TeamsPreferred))题意有\(n\)个石头,每个石头有一个值\(a_i\),现在需要给这......