[ABC297F] Minimum Bounding Box 2 题解
容斥真有趣。
有一个性质:
- 两个相同的子矩阵,对答案的贡献一定相同。
所以就只需要枚举矩阵大小即可。
我们设当前矩阵长 \(i\) 宽 \(j\)(对应的,\(H\) 为长,\(W\) 为宽),假如要给答案做出贡献,矩阵的四条边一定都有点,发现可以容斥了。
- 至少 \(0\) 条边上有点的方案数为 \(a=C_{i\times j}^k\)。
- 至少 \(1\) 条边上有点的方案数为 \(b=2\times C_{(i-1)\times j}^k+2\times C_{i\times(j-1)}^k\)。
- 至少 \(2\) 条边上有点的方案数为 \(c=4\times C_{(i-1)\times(j-1)}^k+C_{(i-2)\times j}^k+C_{i\times(j-2)}^k\)。
- 至少 \(3\) 条边上有点的方案数为 \(d=2\times C_{(i-1)\times(j-2)}^k+2\times C_{(i-2)\times(j-1)}^k\)。
- 至少 \(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\),所以贡献即为:
\]
时间复杂度 \(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;
}
[ABC297F] Minimum Bounding Box 2 题解的更多相关文章
- ABC130 Task F. Minimum Bounding Box
题目链接 题解 最小的 bounding box 一定可以在四个时间段的最左端点和最右端点之间取到. 举例言之,设四个时间段分别是 (2, 5), (7, 10), (4, 9), ( 10, 20) ...
- AtCoder Beginner Contest 130 F Minimum Bounding Box 三分法求极值(WA)
题意:给n个点的起始坐标以及他们的行走方向,每一单位时间每个点往它的方向移动一单位.问最小能包围所有点的矩形. 解法:看到题目求极值,想了想好像可以用三分法求极值,虽然我也不能证明面积是个单峰函数. ...
- AtCoder ABC 130F Minimum Bounding Box
题目链接:https://atcoder.jp/contests/abc130/tasks/abc130_f 题目大意 给定地图上 N 个点的坐标和移动方向,它们会以每秒 1 个单位的速度移动,设 A ...
- 3D空间中的AABB(轴向平行包围盒, Aixe align bounding box)的求法
引言 在前面的一篇文章中讲述了怎样通过模型的顶点来求的模型的包围球,而且还讲述了基本包围体除了包围球之外,还有AABB包围盒.在这一章,将讲述怎样依据模型的坐标求得它的AABB盒. 表示方法 AABB ...
- Latex 中插入图片no bounding box 解决方案
在windows下,用latex插入格式为jpg,png等图片会出现no bounding box 的编译错误,此时有两个解决办法: 1.将图片转换为eps格式的图片 \usepackage{grap ...
- bounding box的简单理解
1. 小吐槽 OverFeat是我看的第一篇深度学习目标检测paper,因为它是第一次用深度学习来做定位.目标检测问题.可是,很难懂...那个bounding box写得也太简单了吧.虽然,很努力地想 ...
- 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)
论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...
- 第二十六节,滑动窗口和 Bounding Box 预测
上节,我们学习了如何通过卷积网络实现滑动窗口对象检测算法,但效率很低.这节我们讲讲如何在卷积层上应用这个算法. 为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层.我们先讲解这 ...
- maya cmds pymel polyEvaluate 获取 bounding box
maya cmds pymel polyEvaluate 获取 bounding box cmds.polyEvaluate(bc = 1) #模型 cmds.polyEvaluate(bc2 = ...
- Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box)
Torch 两个矩形框重叠面积的计算 (IoU between tow bounding box) function DecideOberlap(BBox_x1, BBox_y1, BBox_x2, ...
随机推荐
- 修改data数据后页面未更新渲染
只需添加 this.$forceUpdate() 在修改数据后执行即可 this.$forceUpdate()
- 关于com组件的方法,以AE的IFieldsEdit为例
今天,有小伙伴问我,为什么在调用IFieldsEdit接口时,VS无法自动显示出AddFiled方法,而这个方法是确实存在的 在此,做下解答,因为这个方法被隐藏了.TypeLibFunc属性,被用来指 ...
- js修改表单值不会触发input事件
前情 最近在做需求开发时候,需要监听表单的input事件 坑位 当通过JS动态修改表单的值的发现并不会触发表单的input事件 Why? 个人猜测是浏览器默认行为,input只会针对用户手动输入做响应 ...
- influxdb group by(1d) 查询注意事项
转载请注明出处: 在 InfluxDB 中,默认的时区是 UTC(协调世界时).所有的时间戳在数据写入时默认视为 UTC.这意味着如果没有在插入数据时指定其他时区,InfluxDB 会将所有时间数据处 ...
- LSTM学习三维轨迹的Python实现
一.引言 长短期记忆网络(LSTM)是一种强大的递归神经网络(RNN),广泛应用于时间序列预测.自然语言处理等任务.在处理具有时间序列特征的数据时,LSTM通过引入记忆单元和门控机制,能够更有效地捕捉 ...
- Dockerfile轻松打包jar包生成docker
1. 创建java目录 mkdir /home/java/ cd /home/java/ 2. 创建Dockerfile #FROM openjdk:8-jdk-alpine #ADD *.jar a ...
- 2024年1月Java项目开发指南15:vue3+AntDesignVue 设计页面
考虑到有的同学对vue3不熟悉,因此,我把ControlView.vue这个页面清空,我们从0开始写. <template style="width: 100%"> & ...
- go编译可以指定os和arch
是的,Go 编译器支持通过环境变量来指定目标操作系统(OS)和架构(Arch).这允许你为不同的平台交叉编译 Go 程序.你可以使用 GOOS 和 GOARCH 环境变量来指定目标系统. 例如,如果你 ...
- 配置YUM源出现Errno 14 Could not open/read repomd.xml 或者 "Couldn't open file /mnt/cdrom/repodata/repomd.xml" 错误的解决办法
报错信息: [root@tcljr-jdh-uat007 yum.repos.d]# yum makecache Loaded plugins: fastestmirror Loading mirro ...
- 关于Qt国产化系统开发的几点总结
随着国产化的兴起,各种国产系统和国产数据库等逐渐进入开发者的世界,科普几个要点. 中标麒麟neokylin基于fedora. 银河麒麟kylin早期版本比如V2基于freebsd,新版本V4.V10基 ...