首页 > 其他分享 >[ABC297F] Minimum Bounding Box 2 题解

[ABC297F] Minimum Bounding Box 2 题解

时间:2024-03-09 11:55:06浏览次数:28  
标签:Box 边上 数为 题解 ll 矩阵 times re Bounding

容斥真有趣。

有一个性质:

  • 两个相同的子矩阵,对答案的贡献一定相同。

所以就只需要枚举矩阵大小即可。

我们设当前矩阵长 \(i\) 宽 \(j\)(对应的,\(H\) 为长,\(W\) 为宽),假如要给答案做出贡献,矩阵的四条边一定都有点,发现可以容斥了。

  1. 至少 \(0\) 条边上有点的方案数为 \(a=C_{i\times j}^k\)。
  2. 至少 \(1\) 条边上有点的方案数为 \(b=2\times C_{(i-1)\times j}^k+2\times C_{i\times(j-1)}^k\)。
  3. 至少 \(2\) 条边上有点的方案数为 \(c=4\times C_{(i-1)\times(j-1)}^k+C_{(i-2)\times j}^k+C_{i\times(j-2)}^k\)。
  4. 至少 \(3\) 条边上有点的方案数为 \(d=2\times C_{(i-1)\times(j-2)}^k+2\times C_{(i-2)\times(j-1)}^k\)。
  5. 至少 \(4\) 条边上有点的方案数为 \(e=C_{(i-2)\times(j-2)}^k\)。

根据容斥,答案应为 \(a-b+c-d+e\)。

长 \(i\) 宽 \(j\) 的矩阵有 \((H-i+1)\times(W-j+1)\) 个,每个大小为 \(i\times j\),所以贡献即为:

\[(a-b+c-d+e)\times(H-i+1)\times(W-j+1)\times i\times j \]

时间复杂度 \(O(HW)\)。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
const ll p=998244353;
const int N=1005;
ll qpow(ll x,int y){
    ll re=1;
    while(y){
        if(y&1) re=re*x%p;
        x=x*x%p;
        y>>=1;
    }return re;
}ll n,m,k,sum;
ll jc[N*N],inv[N*N];
void init(){
    jc[0]=inv[0]=1;
    for(ll i=1;i<=n*m;i++){
        jc[i]=jc[i-1]*i%p;
        inv[i]=qpow(jc[i],p-2);
    }
}ll C(int x,int y){
    if(x<y) return 0;
    if(!y||x==y) return 1;
    return jc[x]*inv[y]%p*inv[x-y]%p;
}int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>k;
    if(k==1){
        cout<<1;
        return 0;
    }init();
    for(ll i=1;i<=n;i++)
        for(ll j=1;j<=m;j++){
            if(i*j<k) continue;
            ll x=C(i*j,k);
            x=((x-2*C((i-1)*j,k)%p)%p+p)%p;
            x=((x-2*C((j-1)*i,k)%p)%p+p)%p;
            x=(x+4*C((i-1)*(j-1),k)%p)%p;
            x=(x+C((i-2)*j,k)+C((j-2)*i,k))%p;
            x=((x-2*C((i-1)*(j-2),k))%p+p)%p;
            x=((x-2*C((i-2)*(j-1),k))%p+p)%p;
            x=(x+C((i-2)*(j-2),k))%p;
            sum=(sum+(n-i+1)*(m-j+1)*i*j%p*x%p)%p;
        }
    cout<<sum*qpow(C(n*m,k),p-2)%p;
    return 0;
}

标签:Box,边上,数为,题解,ll,矩阵,times,re,Bounding
From: https://www.cnblogs.com/chang-an-22-lyh/p/18062469/abc297f-tj

相关文章

  • P4139 上帝与集合的正确用法 题解
    传送门我觉得这题最有意思的其实是"最终会固定为一个数"这个结论。扩展欧拉定理:\(a^b\bmodp\),当\(b\ge\varphi(p)\)时,\(a^b\equiva^{b\bmod\varphi(p)+\varphi(p)}\pmodp\)。所以\(2^{2^{2^{\cdots}}}\)可以递归求解。边界条件\(p=1\)。复杂度如何保证?其实就是......
  • P4774 屠龙勇士 题解
    传送门显然每一只龙对应了唯一的一把剑。用multiset可以求出每一把剑。于是题目就变成了:\[\begin{cases}b_1x\equiva_1\pmod{m_1}\\b_2x\equiva_2\pmod{m_2}\\\dots\\b_nx\equiva_n\pmod{m_n}\end{cases}\]如果\(b_i=1\),直接EXCRT即可。现在\(b_i>1\),还是以EXCRT......
  • virtual box安装cendos7并配置外网及静态IP(转)
    一、前期准备工作:1、虚拟机下载VirtualBox版本:7.0.6下载VirtualBox的下载页面:https://www.virtualbox.org/wiki/DownloadsVMWare虚拟机软件(收费的,要使用请购买正版软件)的官网:https://www.vmware.comVMWare虚拟机的免费版VMWarePlayer:https://www.vmware.com/products/w......
  • APatch常见问题解答
    常见问题解答什么是APatch?APatch是一种类似于Magisk或KernelSU的root解决方案,但APatch提供更多功能。APatch分别结合了Magisk方便易用的通过boot.img安装的方法,和KernelSU强大的内核修补能力。APatch与Magisk的区别?Magisk对启动映像中的ramdisk进行补丁,以修改init系统。而AP......
  • P6810 「MCOI-02」Convex Hull 凸包 题解
    分析推式子题。\[ans=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\tau(i)\tau(j)\tau(\gcd(i,j))\]对于\((i,j)\),若\(k\)是\((i,j)\)的因子,则\(k\)一定整除\(i,j\),所以有:\[\\\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{m}\tau(i)\tau(j)\sum\limits......
  • VB.NET 在DataGridview 动态添加下拉列表控件DataGridViewComboBoxColumn要点两次才可
     DataGridview属性EditMode设为EditOnEnter 添加如下事件代码PrivateSubdgvZhiJianXiangMu_CellClick(ByValsenderAsSystem.Object,ByValeAsSystem.Windows.Forms.DataGridViewCellEventArgs)HandlesdgvZhiJianXiangMu.CellClickIfe.ColumnIndex>=0AndAls......
  • CF1436E Complicated Computations 题解
    题目链接:CF或者洛谷关于\(mex\)问题是一个比较久远的问题,有很多经典的方法去解决。本题的\(mex\)是从正整数开始的,不要忽略掉。来讲讲常见的两种解决方案,首先回到题目所问,如果我们暴力地询问:\(1,2,3,4,.....mex\)是否都能由原数组构造出来,对于\(i\)如果它可以由原数组......
  • ItemsControl和ListView、ListBox的区别
    1、ItemsControl用来显示一个数据项的集合,它的底层是一个列表,它可以非常灵活的展示布局和数据以下是例子<ItemsControlItemsSource="{BindingStudent}"><ItemsControl.ItemTemplate><DataTemplate> <TextBlockText="{BindingId}"/> <Tex......
  • CF935D Fafa and Ancient Alphabet 题解
    讲一个很暴力的方法(为描述方便,下文\(a\)数组代表\(s1\),\(b\)数组代表\(s2\))。发现假如当前\(a_i\neb_i\),就不需要再向下枚举了,于是拥有了分类讨论的雏形。我们设\(inv\)代表进行到这一步的概率,可分为以下四种情况:\(a_i>0,b_i>0\)。此时假如\(a_i=b_i\),略过;若\(a_i>......
  • [HDU6647] Bracket Sequences on Tree 题解
    [HDU6647]BracketSequencesonTree题解一道纯靠自己推出来的换根\(dp+\)树哈希,写篇题解庆祝一下~~题意:给定一棵无根树,你可以任意选择根节点和遍历顺序,每次遍历时进入一个节点就标记一个(,离开一个节点就标记一个),问所有存在的括号序列有多少种,对998244353取模。先考虑根固......