[CSP-S模拟测试]:多维网格(组合数学+容斥)
题目传送门(内部题138)
输入格式
输入数据第一行为两个整数$d,n$。
第二行$d$个非负整数$a_1,a_2,...,a_d$。
接下来$n$行,每行$d$个整数,表示一个坏点的坐标。数据保证坏点在网络范围内,且不会是点$A$或点$B$。
输出格式
一个整数,为从点$A$移动到点$B$的不同的路径数对$10^9+7$取模后的值。
样例
样例输入:
2 1
2 1
1 0
样例输出:
1
数据范围与提示

题解
先来考虑$n=0$的情况,利用组合数学,答案就是:
$$ans=(\sum\limits_{i=1}^d a_i)!\times \prod\limits_{i=1}^d(a_i!)^{-1}$$。
再来考虑$n\neq 0$的情况。
考虑容斥。
不妨设$dp[i]$表示从$A$点出发到达$i$点的合法路径条数,$g[i][j]$表示从$i$到$j$的任意路径条数,则有:
$$dp[i]=g[A][i]-\sum\limits_{j=1}^{i-1}dp[j]\times g[j][i]$$
时间复杂度:$\Theta(n^2d)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
struct rec{int d[101];}a[502];
int d,n;
int fac[10000001],inv[10000001];
long long dp[502];
long long qpow(long long x,long long y)
{
long long res=1;
while(y)
{
if(y&1)res=res*x%mod;
x=x*x%mod;y>>=1;
}
return res;
}
void pre_work()
{
fac[0]=1;
for(int i=1;i<=10000000;i++)fac[i]=1LL*fac[i-1]*i%mod;
inv[10000000]=qpow(fac[10000000],mod-2);
for(int i=10000000;i;i--)inv[i-1]=1LL*inv[i]*i%mod;
}
bool cmp(rec a,rec b){for(int i=1;i<=d;i++)if(a.d[i]!=b.d[i])return a.d[i]<b.d[i];}
long long ask(rec a,rec b)
{
int now=0;
long long res=1;
for(int i=1;i<=d;i++)
{
if(b.d[i]<a.d[i])return 0;
now+=b.d[i]-a.d[i];
res=res*inv[b.d[i]-a.d[i]]%mod;
}
return res*fac[now]%mod;
}
int main()
{
pre_work();scanf("%d%d",&d,&n);
for(int i=1;i<=n+1;i++)
for(int j=1;j<=d;j++)
scanf("%d",&a[i].d[j]);
sort(a+1,a+n+2,cmp);
for(int i=1;i<=n+1;i++)
{
dp[i]=ask(a[0],a[i]);
for(int j=1;j<i;j++)dp[i]=(dp[i]-ask(a[j],a[i])*dp[j]%mod+mod)%mod;
}
printf("%lld",dp[n+1]);
return 0;
}
rp++
[CSP-S模拟测试]:多维网格(组合数学+容斥)的更多相关文章
- 【GDOI2016模拟3.16】幂(容斥 + 模型复杂转化)
[GDOI2016模拟3.16]幂 \(X\in[1,A],Y\in[1,B]\),问:\(x^y\)的不用取值个数. \(A,B\)都是\(10^9\)级别. 然后我们开搞. 首先,假设一个合法的\ ...
- HDU 6397 Character Encoding (组合数学 + 容斥)
题意: 析:首先很容易可以看出来使用FFT是能够做的,但是时间上一定会TLE的,可以使用公式化简,最后能够化简到最简单的模式. 其实考虑使用组合数学,如果这个 xi 没有限制,那么就是求 x1 + x ...
- NOIp模拟赛 巨神兵(状压DP 容斥)
\(Description\) 给定\(n\)个点\(m\)条边的有向图,求有多少个边集的子集,构成的图没有环. \(n\leq17\). \(Solution\) 问题也等价于,用不同的边集构造DA ...
- [BZOJ2839]:集合计数(组合数学+容斥)
题目传送门 题目描述 .(是质数喔~) 输入格式 一行两个整数N,K. 输出格式 一行为答案. 样例 样例输入: 3 2 样例输出: 样例说明 假设原集合为{A,B,C} 则满足条件的方案为:{AB, ...
- [CQOI2014]数三角形 题解(组合数学+容斥)
[CQOI2014]数三角形 题解(数论+容斥) 标签:题解 阅读体验:https://zybuluo.com/Junlier/note/1328780 链接题目地址:洛谷P3166 BZOJ 350 ...
- P6076-[JSOI2015]染色问题【组合数学,容斥】
正题 题目链接:https://www.luogu.com.cn/problem/P6076 题目大意 给出\(n*m\)的网格,\(c\)种颜色涂色要求 每个格子可以染色也可以不染 每一行每一列至少 ...
- [NOIP模拟测试7]visit 题解(组合数学+CRT+Lucas定理)
Orz 因为有T的限制,所以不难搞出来一个$O(T^3)$的暴力dp 但我没试 据说有30分? 正解的话显然是组合数学啦 首先$n,m$可能为负,但这并没有影响, 我们可以都把它搞成正的 即都看作向右 ...
- [CSP-S模拟测试]:建设城市(city)(组合数学+容斥)
题目传送门(内部题8) 输入格式 一行三个整数$n,m,k$. 输出格式 一行一个整数表示答案.对$998244353$取模. 样例 样例输入 3 7 3 样例输出 数据范围与提示 对于10%的数据, ...
- 【10.3校内测试【国庆七天乐!】】【DP+组合数学/容斥】【spfa多起点多终点+二进制分类】
最开始想的暴力DP是把天数作为一个维度所以怎么都没有办法优化,矩阵快速幂也是$O(n^3)$会爆炸. 但是没有想到另一个转移方程:定义$f[i][j]$表示每天都有值的$i$天,共消费出总值$j$的方 ...
随机推荐
- Django之cookie与session、中间件
目录 cookie与session 为什么会有cookie和session cookie 设置cookie 获取cookie 删除cookie 实例:cookie版登录校验 session 设置ses ...
- 如何决定使用 HashMap 还是 TreeMap? (转)
问:如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照 ...
- 如何让 node 运行 es6 模块文件,及其原理
如何让 node 运行 es6 模块文件,及其原理 最新版的 node 支持最新版 ECMAScript 几乎所有特性,但有一个特性却一直到现在都还没有支持,那就是从 ES2015 开始定义的模块化机 ...
- mysql-1.1基础
笔记内容:mysql基础,创建数据库,创建表,操作数据表,操作数据,简单查询,条件查询,排序,分组,聚合,连接查询(等值连接,内连接,外链接),子查询 自己提示:脑图笔记存于网盘中 右键:新标签页打 ...
- spring boot 配置文件动态更新原理 以Nacos为例
配置文件的动态更新 通常获取配置文件的方式 1, @Value 2. @ConfigurationProperties(Prefix) 如果是在运行时要动态更新的话, 第一种方式要在bean上加@Re ...
- mac 下安装mysql8.0
有两种安装方式,一种是安装包安装,官网下载安装包,mysql8.0下载.mysql5.7安装: 这里记录brew安装: 1.brew uninstall mysql 卸载原有的: 2.brew ins ...
- bilibili小程序项目总结
1.关于mock的使用 第一步:先到Mock官网(http://mockjs.com/)上面熟悉一下基本用法 第一步:具体使用实例: 下载wxMock.js和mock.js文件 下载地址:https: ...
- Caffe常用算子GPU和CPU对比
通过整理LeNet.AlexNet.VGG16.googLeNet.ResNet.MLP统计出的常用算子(不包括ReLU),表格是对比. Prelu Cpu版 Gpu版 for (int i = 0; ...
- 简单了解 TCP TCP/IP HTTP HTTPS
一. 什么是TCP连接的三次握手 第一次握手:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+ ...
- SQL注入--盲注及报错注入
盲注查询 盲注其实就是没有回显,不能直观地得到结果来调整注入数据,只能通过其他方式来得到是否注入成功,主要是利用了一些数据库内置函数来达到的 布尔盲注 布尔很明显Ture跟Fales,也就是说它只会根 ...