Cheerleaders UVA - 11806

Cheerleaders - UVA 11806 - Virtual Judge

题目大意:有一个n*m的网格,要把其中k个格子涂黑,且满足最上、下一行、最左、右一列分别至少有一格黑,问方案数有多少

2<=m,n<=50;k<=500

思路:因为合法的方案数不好考虑,所以考察不合法的方案数,我们设第一行没有黑格为A,第一列没有黑格为B,最后一行没有黑格为C,最后一列没有黑格为D,根据容斥原理有:非法方案数=-A-B-C-D+AB+AC+AD+BC+BD+CD-ABC-ABD-ACD-BCD+ABCD,这些都可以用组合数算,就是从除了选中行/列以外的格子里选k个,例如A=C[n*m-m][k],AB=C[n*m-n-m+1][k]。

因为题目中的模数不是质数,所以不能用常规打表阶乘逆元的方法算,因为数据范围很小,所以可以用递推转移的方法打表,首先初始化C[i][0]和C[i][i]都是1,对于1到i-1,有c[i][j]=C[i-1]j]+C[i-1][j-1],我们将15个几何都算出来求和即可。

#include<bits/stdc++.h>
//#include<__msvc_all_public_headers.hpp>
using namespace std;
typedef long long ll;
const int N = 1e6 + 5;
const ll MOD = 1e6 + 7;
ll n;
ll inv[N], fac[N];
ll C[405][405];
void calC()
{//打表预处理组合数C[0][0] = 1;for (int i = 1; i <= 400; i++){C[i][0] = C[i][i] = 1;//边界都是1for (int j = 1; j < i; j++){//中间用类似杨辉三角的形式转移C[i][j] = C[i - 1][j] + C[i - 1][j - 1] % MOD;}}
}
void solve(int t)
{ll m, k;cin >> n >> m >> k;ll ans = C[n * m][k];//总方案数ans = (ans - C[n * m - n][k] + MOD) % MOD;//Aans = (ans - C[n * m - n][k] + MOD) % MOD;//Bans = (ans - C[n * m - m][k] + MOD) % MOD;//Cans = (ans - C[n * m - m][k] + MOD) % MOD;//Dans = (ans + C[n * m - n - m + 1][k]) % MOD;//ABans = (ans + C[n * m - n - m + 1][k]) % MOD;//ADans = (ans + C[n * m - n - n][k]) % MOD;//ACans = (ans + C[n * m - m - m][k]) % MOD;//BDans = (ans + C[n * m - m - n + 1][k]) % MOD;//BCans = (ans + C[n * m - n - m + 1][k]) % MOD;//CDans = (ans - C[n * m - 2 * n - m + 2][k] + MOD) % MOD;//ABCans = (ans - C[n * m - 2 * n - m + 2][k] + MOD) % MOD;//ACDans = (ans - C[n * m - 2 * m - n + 2][k] + MOD) % MOD;//BCDans = (ans - C[n * m - 2 * m - n + 2][k] + MOD) % MOD;//ABDans = (ans + C[n * m - 2 * m - 2 * n + 4][k]) % MOD;//ABCDcout << "Case " << t << ": " << ans % MOD << endl;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0);int t;cin >> t;calC();int cnt = 0;while (t--){cnt++;solve(cnt);       }return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/93658.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hwk4:C++ 运算符重载

用mystring实在部分C运算符重载 mystring.h: #ifndef MYSTRING_H #define MYSTRING_H#include <iostream> #include <cstring>using namespace std;class myString { private:char *str; //记录c风格的字符串int size; //记录字符串的实际长…

计算机组成原理期末复习

第一章 上机前的准备&#xff1a;建立数学模型、确定计算方法和编制解题程序n位操作码有 2 n 2^n 2n种不同操作主储存器&#xff08;主存/内存&#xff09;包括存储体M、各种逻辑部件及控制电路。储存体有多个储存单元&#xff0c;储存单元有多个储存元件&#xff0c;每个存储…

《视觉 SLAM 十四讲》V2 第 4 讲 李群与李代数 【什么样的相机位姿 最符合 当前观测数据】

P71 文章目录 4.1 李群与李代数基础4.1.3 李代数的定义4.1.4 李代数 so(3)4.1.5 李代数 se(3) 4.2 指数与对数映射4.2.1 SO(3)上的指数映射罗德里格斯公式推导 4.2.2 SE(3) 上的指数映射SO(3),SE(3),so(3),se(3)的对应关系 4.3 李代数求导与扰动模型4.3.2 SO(3)上的李代数求导…

分布式并行训练(DP、DDP、DeepSpeed)

[pytorch distributed] 01 nn.DataParallel 数据并行初步 数据并行 vs. 模型并行 数据并行&#xff1a;模型拷贝&#xff08;per device&#xff09;&#xff0c;数据 split/chunk&#xff08;对batch切分&#xff09; 每个device上都拷贝一份完整模型&#xff0c;每个device分…

spark SQL 任务参数调优1

1.背景 要了解spark参数调优&#xff0c;首先需要清楚一部分背景资料Spark SQL的执行原理&#xff0c;方便理解各种参数对任务的具体影响。 一条SQL语句生成执行引擎可识别的程序&#xff0c;解析&#xff08;Parser&#xff09;、优化&#xff08;Optimizer&#xff09;、执行…

RabbitMQ核心总结

AMQP协议核心概念 RabbitMQ是基于AMQP协议的&#xff0c;通过使用通用协议就可以做到在不同语言之间传递。 server&#xff1a;又称broker&#xff0c;接受客户端连接&#xff0c;实现AMQP实体服务。 connection&#xff1a;连接和具体broker网络连接。 channel&#xff1a…

c++ std::move 和 std::forward

在C11标准之前&#xff0c;C中默认的传值类型均为Copy语义&#xff0c;即&#xff1a;不论是指针类型还是值类型&#xff0c;都将会在进行函数调用时被完整的复制一份。所以引入了move和forward 临时值&#xff08;右值&#xff09;简述 func("some temporary string&qu…

堆栈与堆(Stack vs Heap)有什么区别?

​编写有效的代码需要了解堆栈和堆内存&#xff0c;这使其成为学习编程的重要组成部分。不仅如此&#xff0c;新程序员或职场老手都应该完全熟悉堆栈内存和堆内存之间的区别&#xff0c;以便编写有效且优化的代码。 这篇博文将对这两种内存分配技术进行全面的比较。通过本文的…

Asp.net core api http请求是怎么找到对应方法并参数映射的

在ASP.NET Core中&#xff0c;HTTP请求是通过路由系统找到对应的方法&#xff0c;并将请求的参数映射到方法的参数上。具体的过程如下&#xff1a; 路由系统&#xff1a; ASP.NET Core中的路由系统负责处理传入的HTTP请求&#xff0c;并根据请求的路径和其他条件决定将请求发送…

网络协议--链路层

2.1 引言 从图1-4中可以看出&#xff0c;在TCP/IP协议族中&#xff0c;链路层主要有三个目的&#xff1a; &#xff08;1&#xff09;为IP模块发送和接收IP数据报&#xff1b; &#xff08;2&#xff09;为ARP模块发送ARP请求和接收ARP应答&#xff1b; &#xff08;3&#xf…

电子元器件数量BOM表统计

在我们绘制完电路原理图或PCB板图后需要输出每个元器件&#xff0c;但是绘图软件上器件名称&#xff0c;数值&#xff0c;模本不是跟理想的一样&#xff0c;BOM表输出还有根据自己的公司规制重新命名&#xff0c;有时根据&#xff0c;常用的位标就是R&#xff0c;C&#xff0c;…

java操作文件,生成文件,读取文件,按顺序读取文件

按顺序读取文件名 Arrays.sort()方法对文件数组进行排序&#xff0c;然后按照排序后的顺序遍历文件数组&#xff0c;以按照文件名从大到小的顺序展示文件名 public class FileSortExample {public static void main(String[] args) {File directory new File("path/to/…

Linux文件系统及命令 | 实用操作指令汇总

目录 ctrl c 强制停止与ctrl d 退出或登出 history&#xff1a;历史命令搜索 clear:清屏 ln命令&#xff1a;创建软硬连接 cat命令&#xff1a;显示文件命令 less命令&#xff1a;查看大文件 grep命令&#xff1a;正则表达式使用 sort命令&#xff1a;排序 uniq命令…

JSON的MIME媒体类型是application/json

JSON&#xff08;全称 JavaScript Object Notation&#xff09;即JavaScript对象表示法&#xff0c;通知使用application/json媒体类型。 目录 1、JSON介绍 2、JSON语法 3、实践总结 运行环境&#xff1a; Windows-7-Ultimate-x64、Windows-10-BusinessEditions-21h2-x64 1…

闲话Python编程-字典dict

在我的Python编程经历中&#xff0c;Python有两大最常用的数据结构&#xff1a;列表list和字典dict&#xff0c;搞明白了这两个数据结构的所有知识点&#xff0c;日常编程基本不成问题了。列表list在前面专题已经详细讲过&#xff0c;本章来着重讲解字典dict的用法。 1. 定义与…

区块链实验室(27) - 区块链+物联网应用案例

分享最新的区块链物联网应用案例&#xff1a;HPCLS-BC

【Kafka专题】Kafka快速实战以及基本原理详解

目录 前言课程内容一、Kafka介绍1.1 MQ的作用1.2 为什么用Kafka 二、Kafka快速上手2.1 实验环境2.2 单机服务体验2.3 认识Kafka模型架构2.4 Kafka集群2.5 理解服务端的Topic、Partion和Broker2.6 章节总结&#xff1a;Kafka集群的整体结构 三、Kraft集群&#xff08;拓展&#…

集群-Nacos-2.2.3、Nginx-1.24.0集群配置

Nacos集群 高可用 Nginx 集群Nacos 集群&#xff08;至少三个实例&#xff09;高可用数据库集群&#xff08;取代 Nacos 内嵌数据库&#xff09; Nacos 集群搭建 集群使用版本&#xff1a; Nginx 1.24.0 Nacos 2.2.3 服务器IP服务器版本Nginx18.18.18.40CentOS-7.9MySQL18.18.…

【计算机网络笔记七】应用层(四)HTTP 通过Content-Type提交数据的方式

1. Content-Type: application/x-www-form-urlencoded 表示纯文本表单提交方式 格式如下&#xff1a; POST /users HTTP/1.1 Host: api.github.com Content-Type: application/x-www-form-urlencoded Content-Length: 27namezhangsan&gendermale 对应的 Retrofit 代码:…

如何安装并启动jupyter notebook

jupyter是什么 Jupyter Notebook 可以使用多种语言&#xff08;Python、R、Julia 等&#xff09;开发交互式笔记本&#xff0c;因此&#xff0c;它会依赖于不同的包和库。但是&#xff0c;对于 Jupyter Notebook 的 Python 版本&#xff0c;以下是一些主要的依赖项&#xff1a…