一个很套路的容斥裸题,这里记录一下scb 的切题过程

Description

  有一个 \(n\times n\) 的矩阵,你需要往每格里填一个 \([1,k]\) 的整数,使得每一行、每一列的最小值都是 \(1\)。求方案数。

  \(n\le 250\)

  \(k\le 10^9\)

Solution

  这题可以 \(O(n)\) 做……不知道这数据范围是什么鬼……

  考虑消除掉一维影响后容斥。

  预处理一个函数 \(f(i)\) 表示填满 \(i\times n\) 的网格,满足每一列填了至少一个 \(1\) 的方案数。

  显然 \(f(0)=0\),\(f(i) = (k^i - (k-1)^i)^n\),\(k^i - (k-1)^i\) 表示任意填充一列的方案数 减去这一列没有 \(1\) 的方案数,那么这一列就至少有一个 \(1\) 咯。

  下面所有统计的情况都是满足列限制的。我们考虑对行限制容斥,用总方案数减去不合法的方案数。

  即

\(\begin{align} ans = &不对行作限制的方案数 - 第 1 行没有 1 的方案数 - 第 2 行没有 1 的方案数 - 第 3 行没有 1 的方案数 - \cdots \nonumber \\ &- 第 n 行没有 1 的方案数 + 第 1,2 行没有 1 的方案数 + 第 1,3 行没有 1 的方案数 +\cdots \nonumber \end{align}\)

  即 \(ans = \sum\limits_{i=0}^n (-1)^i C_n^i (k-1)^{ni} f(n-i)\)

  解释一下,就是钦定 \(i\) 行不能有 \(1\)(显然有 \(C_n^i\) 种钦定方案),然后填充其余 \(n-i\) 行的条件是每一列上都有 \(1\)。

  \(O(n)\) 计算即可。

  还有一道配套容斥题,但并不能公开。

#include<bits/stdc++.h>
#define ll long long
#define N 251
#define mod 1000000007
using namespace std;
inline int read(){
int x=0; bool f=1; char c=getchar();
for(;!isdigit(c); c=getchar()) if(c=='-') f=0;
for(; isdigit(c); c=getchar()) x=(x<<3)+(x<<1)+(c^'0');
if(f) return x; return 0-x;
}
int n,k,f[N],fac[N],ifac[N],ans;
int Pow(int x, int y){
int ret=1;
while(y){
if(y&1) ret=(ll)ret*x%mod;
x=(ll)x*x%mod;
y>>=1;
}
return ret;
}
inline int C(int n, int m){
return (ll)fac[n] * ifac[m] % mod * ifac[n-m] % mod;
}
inline void upd(int &x, int y){
x = (x+y) % mod;
}
int main(){
n=read(), k=read();
fac[0]=1;
for(int i=1; i<=n; ++i){
f[i] = Pow((Pow(k,i)-Pow(k-1,i)+mod)%mod, n),
fac[i] = (ll)fac[i-1] * i % mod;
}
ifac[n] = Pow(fac[n], mod-2);
for(int i=n-1; i>=0; --i) ifac[i] = (ll)ifac[i+1] * (i+1) % mod;
for(int i=0; i<=n; ++i) upd(ans, ((i&1)?mod-1ll:1ll) * C(n,i) % mod * Pow(k-1,(ll)n*i) % mod * f[n-i] % mod);
cout<<ans<<endl;
return 0;
}

【CF589 E】Another Filling the Grid的更多相关文章

  1. 【编程技巧】EXTJS中Ext.grid.GridPanel配置项autoExpandColumn的使用方法

    autoExpandColumn的作用是自动伸展,占满剩余区域.一般使用在列比较少,并且大多数列都比较窄,有一列比较宽的情况下,当然什么时候使用,还是得按照实际情况确定. 使用的时候主要有三点要注意的 ...

  2. 【CodeChef】Querying on a Grid(分治,最短路)

    [CodeChef]Querying on a Grid(分治,最短路) 题面 Vjudge CodeChef 题解 考虑分治处理这个问题,每次取一个\(mid\),对于\(mid\)上的三个点构建最 ...

  3. 【消灭代办】第2周 - 数组判断、开发工具、transform:matrix、Grid

    2018.11.19代办一:[数组判断] 代办描述: 怎么判断一个数组是数组呢?其实这个也是一个常考的题目 关键考点: 1.js中对象类型判断的几种方法 2.数组的知识和灵活运用 解决方案s: 篇幅过 ...

  4. 【NOIP模拟】Grid(字符串哈希)

    题目背景 SOURCE:NOIP2016-RZZ-1 T3 题目描述 有一个 2×N 的矩阵,矩阵的每个位置上都是一个英文小写字符. 现在需要从某一个位置开始,每次可以移动到一个没有到过的相邻位置,即 ...

  5. 【静默安装】configToolAllCommands响应文件问题

    [静默安装]configToolAllCommands响应文件问题 客户在静默安装RAC 12.1.0.2的时候有如下的输出: Successfully Setup Software. As inst ...

  6. 20个新鲜出炉的网站模板【HTML & PSD】

    这里给大家分享20 个新鲜出炉的免费网站模板.这些设计元素将成为你下一个项目的重要素材,可以帮你节省很多的时间.与往常一样,我们经常漫游网络,寻找最好的资源, HTML.CSS 和 PSD 等等,记得 ...

  7. 【响应式】foundation栅格布局的“尝鲜”与“填坑”

      提到响应式,就不得不提两个响应式框架--bootstrap和foundation.在标题上我已经说明白啦,今天给大家介绍的是foundation框架. 何为"尝鲜"?就是带大伙 ...

  8. 【Oracle RAC】Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂)

    [Oracle RAC]Linux系统Oracle11gR2 RAC安装配置详细过程V3.1(图文并茂) 2 Oracle11gR2 RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件 ...

  9. 【Oracle RAC】Linux系统Oracle12c RAC安装配置详细记录过程V2.0(图文并茂)

    [Oracle RAC]Linux系统Oracle12c RAC安装配置详细过程V2.0(图文并茂) 2 Oracle12c RAC数据库安装准备工作2.1 安装环境介绍2.2 数据库安装软件下载3 ...

随机推荐

  1. Node初始以及环境搭建(Node01)

    1. 相关概念 •什么是JavaScript? •一种遵守ECMAScript标准的脚本语言 •最初只能运行在浏览器端 •浏览器中的 JavaScript 可以做什么? •操作DOM:表单验证.动画 ...

  2. JS实现数组去重(重复元素保留一个)

    1.遍历数组法 它是最简单的数组去重方法(indexOf方法) 实现思路:新建一个数组,遍历去要重的数组,当值不在新数组的时候(indexOf为-1)就加入该新数组中: var arr=[2,8,5, ...

  3. sk_buff内核api函数记录

    1.alloc_skb() 上层协议要发送数据包的时候或网络设备准备接收数据包的时候调用 2.kfree_skb() 释放sk_buff结构体 3.skb_put() 在数据区的末端添加某协议的尾部 ...

  4. java实现网络请求超时自动熔断

    原文:https://www.jianshu.com/p/326465500d1c?utm_campaign 使用场景 之前在实现熔断降级组件时,需要实现一个接口的超时中断,意思是,业务在使用熔断降级 ...

  5. Ubuntu系统---中英文问题小记

    Ubuntu系统---中英文问题小记 Ubuntu系统安装的时候,选择English版本,这样进入tty模式,中文提示不会显示乱码,终端下也是提示英文版的信息. Ubuntu 系统中文显示乱码的问题解 ...

  6. 2018牛客网暑期ACM多校训练营(第二场)I- car ( 思维)

    2018牛客网暑期ACM多校训练营(第二场)I- car 链接:https://ac.nowcoder.com/acm/contest/140/I来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 ...

  7. 关键字final 修饰类、方法、属性、参数类型

    笔记: /** 关键字final(最终的) 标记的类不能被继承, 提高安全性,提高程序的可读性 * 1.final 修饰类,这个类就不能被继承: 如:String类.StringBuffer类.Sys ...

  8. Python网络爬虫四大选择器(正则表达式、BS4、Xpath、CSS)总结

    一.正则表达式 正则表达式为我们提供了抓取数据的快捷方式.虽然该正则表达式更容易适应未来变化,但又存在难以构造.可读性差的问题.当在爬京东网的时候,正则表达式如下图所示: 此外 ,我们都知道,网页时常 ...

  9. 1115 JAVAScript基础

    目录 JavaScript 1.基础 1.1 注释 1.2 引入方式 2. 变量 2.1 变量声明 2.2 变量的命名规范 3.常量 4. 数据类型 4.1 数值型 Number 4.2 字符串型 S ...

  10. Redis做消息队列

    1.连接从Redis中获取日志文件并存储到ES中 [root@Logstash ~]# vim /usr/local/logstash/config/redis.conf input {     be ...