[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, ...
随机推荐
- 《前端运维》二、Nginx--2请求处理流程及核心模块
前一篇内容,我们学习了nginx的一些基本概念.安装和目录的作用.这篇文章我们来学习一些更加深入的内容. 一.Nginx请求处理流程 我们先来看张图吧: 我们看上图,首先客户端请求到Nginx服务器, ...
- 鸿蒙UI开发快速入门 —— part02: 组件开发
1. 组件基本介绍 在ArkUI中,UI显示的内容均为组件,由框架直接提供的称为系统组件,由开发者定义的称为自定义组件.在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码 ...
- 渗透测试-前端验签绕过之SHA256
本文是高级前端加解密与验签实战的第1篇文章,本系列文章实验靶场为Yakit里自带的Vulinbox靶场,本文讲述的是绕过SHA256签名来爆破登录. 绕过 通过查看源代码可以看到key为 123412 ...
- 2024年1月Java项目开发指南14:关于post中的body和param以及java中的@RequestBody和@RequestParam
在HTTP请求中,POST方法通常用于向服务器发送数据,这些数据可以在请求的body中,也可以在URL的param中.不过,这两者的使用方式和适用场景是不同的. Body:在POST请求中,body主 ...
- Arch Linux 安装完成后配置声音
安装完 Arch Linux 后,虽然已经装了 alsa-utils,但是仍然可能出现无法播放声音的情况,这里记录了一种解决方案,在我的 Dell 上成功. 如果使用 alsamixer 解除静音后还 ...
- TB交易开拓者_趋势跟踪策略_多品种对冲_递进优化回测_A0001188020期货量化策略
如果您需要代写技术指标公式, 请联系我. 龙哥QQ:591438821 龙哥微信:Long622889 也可以把您的通达信,文华技术指标改成TB交易开拓者的自动交易量化策略. 众所周知,投资界有基本面 ...
- Qt编写地图综合应用37-覆盖物多边形
一.前言 多边形主要的应用场景是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理. 二.功能特点 同 ...
- Python 添加类型标注 | 散发着自由松散气息的代码
Python 添加类型标注 | 散发着自由松散气息的代码 Python 如此简洁,书写者在声明变量时甚至无需考虑类型. 但是简洁与复杂间,是存在一个平衡点的.当我们书写较为复杂的项目时,还是希望可以拥 ...
- CDS标准视图:维护通知数据 I_PMNotifMaintenanceData
视图名称:维护通知数据 I_PMNotifMaintenanceData 视图类型:基础视图 视图代码: 点击查看代码 @EndUserText.label: 'Notification Mainte ...
- 题解:AT_abc385_f [ABC385F] Visible Buildings
小学二年级就会的基本一次函数知识. 抽象一下题意: 求 \(n\) 个点 \((X_i, H_i)\) 中任意两个点组成的直线的截距的最大值(不小于 \(0\),\(X_i\) 递增). 先说结论:先 ...