[JZOJ6244]【NOI2019模拟2019.7.1】Trominoes 【计数】
Description
n,m<=10000
Solution
考虑暴力轮廓线DP,按顺序放骨牌
显然轮廓线长度为N+M
轮廓线也是单调的
1表示向上,0表示向右
N个1,M个0
只能放四种骨牌
四种转移写出来,就是
1000 0001
1110 0111
1010 0011
1100 0101
相当与一个1和后面3格的一个0换过来,中间不变
把模3相同的分组, 转换成只换相邻的10
再把它看作轮廓线,相当与每次只能放1×1的骨牌,问拓扑序个数
利用杨氏矩阵的钩子定理
就是矩阵大小的阶乘除以每个位置向右向下的位置个数和之积
最后再乘个组合数表示选的顺序
此时我们发现组合数约掉了,只剩下一个n×m的阶乘
直接计算即可。
Code
#include <bits/stdc++.h>
#define fo(i,a,b) for(int i=a;i<=b;++i)
#define fod(i,a,b) for(int i=a;i>=b;--i)
typedef long long LL;
const int mo=1000000007;
using namespace std;
int n,m,r,c[3][2],js[33333333];
LL ksm(LL k,LL n)
{
LL s=1;
for(;n;n>>=1,k=k*k%mo) if(n&1) s=s*k%mo;
return s;
}
LL calc(int p)
{
int n=c[p][0],m=c[p][1];
LL s=1;
fo(i,1,n+m-1)
{
LL nv=ksm(i,mo-2),ct=max(0,min(m-1,i-1)-max(0,i-n)+1);
s=s*ksm(nv,ct)%mo;
}
return s;
}
int main()
{
int t;
cin>>t;
int R=33333332;
js[0]=1;
fo(i,1,R) js[i]=js[i-1]*(LL)i%mo;
while(t--)
{
cin>>n>>m;
memset(c,0,sizeof(c));
fo(i,0,n-1) c[i%3][0]++;
fo(i,n,n+m-1) c[i%3][1]++;
r=max(max(c[0][0]*c[0][1],c[1][0]*c[1][1]),c[2][0]*c[2][1]);
LL v=1;
int e=c[0][0]*c[0][1]+c[1][0]*c[1][1]+c[2][0]*c[2][1];
printf("%lld\n",calc(0)*calc(1)%mo*calc(2)%mo*js[e]%mo);
}
}
[JZOJ6244]【NOI2019模拟2019.7.1】Trominoes 【计数】的更多相关文章
- [JZOJ6244]【NOI2019模拟2019.7.1】islands【计数】【图论】
Description n<=1e9,M,K<=100 Solution 显然任选m个港口的答案是一样的,乘个组合数即可. 考虑枚举m个港口的度数之和D 可以DP计算 记\(F_{m,D} ...
- [JZOJ6247]【NOI2019模拟2019.6.27】C【计数】
Description n<=200000 Solution 比赛时没做出这道题真的太弟弟了 首先我们从小到大插入数i,考虑B中有多少个区间的最大值为i 恰好出现的次数不太好计算,我们考虑计算最 ...
- 【NOI2019模拟2019.7.1】为了部落 (生成森林计数,动态规划)
Description: \(1<=n<=1e9,1<=m,k<=100\) 模数不是质数. 题解: 先选m个点,最后答案乘上\(C_{n}^m\). 不妨枚举m个点的度数和D ...
- 【NOI2019模拟2019.7.1】三格骨牌(轮廓线dp转杨图上钩子定理)
Description \(n,m<=1e4,mod ~1e9+7\) 题解: 显然右边那个图形只有旋转90°和270°后才能放置. 先考虑一个暴力的轮廓线dp: 假设已经放了编号前i的骨牌,那 ...
- [JZOJ6241]【NOI2019模拟2019.6.29】字符串【数据结构】【字符串】
Description 给出一个长为n的字符串\(S\)和一个长为n的序列\(a\) 定义一个函数\(f(l,r)\)表示子串\(S[l..r]\)的任意两个后缀的最长公共前缀的最大值. 现在有q组询 ...
- 【NOI2019模拟2019.6.29】字符串(SA|SAM+主席树)
Description: 1<=n<=5e4 题解: 考虑\(f\)这个东西应该是怎样算的? 不妨建出SA,然后按height从大到小启发式合并,显然只有相邻的才可能成为最优答案.这样的只 ...
- 【NOI2019模拟2019.6.29】组合数(Lucas定理、数位dp)
Description: p<=10且p是质数,n<=7,l,r<=1e18 题解: Lucas定理: \(C_{n}^m=C_{n~mod~p}^{m~mod~p}*C_{n/p} ...
- 【NOI2019模拟2019.7.4】朝夕相处 (动态规划+BM)
Description: 题解: 这种东西肯定是burnside引理: \(\sum置换后不动点数 \over |置换数|\) 一般来说,是枚举置换\(i\),则\(对所有x,满足a[x+i]=a[i ...
- 【NOI2019模拟2019.6.27】B (生成函数+整数划分dp|多项式exp)
Description: \(1<=n,k<=1e5,mod~1e9+7\) 题解: 考虑最经典的排列dp,每次插入第\(i\)大的数,那么可以增加的逆序对个数是\(0-i-1\). 不难 ...
随机推荐
- Spark中分布式使用HanLP(1.7.0)分词示例
HanLP分词,如README中所说,如果没有特殊需求,可以通过maven配置,如果要添加自定义词典,需要下载“依赖jar包和用户字典". 分享某大神的示例经验: 是直接"java ...
- 【计算机网络】-介质访问控制子层-无线LAN
[计算机网络]-介质访问控制子层-无线LAN 802.11体系结构和协议栈 802.11网络使用模式: 有架构模式(Infrastructure mode) 无线客户端连接接入点AP,叫做有架构模式 ...
- MySQL 如何更改某一用户及伞下成员的path
MySQL 如何更改某一用户及伞下成员的path 在有的系统中,推荐关系的维护不只是pid那么简单,为了某些业务,可能还会需要维护path字段,path字段的存在,优点在于查询方便,最起码不用递归了 ...
- java基础:强引用、弱引用、软引用和虚引用 (转)
出处文章: Java基础篇 - 强引用.弱引用.软引用和虚引用 谈谈Java对象的强引用,软引用,弱引用,虚引用分别是什么 整体结构 java提供了4中引用类型,在垃圾回收的时候,都有自己的各自特点. ...
- 如何决定使用 HashMap 还是 TreeMap? (转)
问:如何决定使用 HashMap 还是 TreeMap? 介绍 TreeMap<K,V>的Key值是要求实现java.lang.Comparable,所以迭代的时候TreeMap默认是按照 ...
- 用纯 CSS 创作一个在容器中反弹的小球
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/jKVbyE 可交互视频教 ...
- LoadRunner之使用JSEESIONID访问网站
LoadRunner使用笔记 JSESSIONID的含义:https://www.cnblogs.com/caiwenjing/p/8081391.html 1.使用JSESSIONID访问网站 Ac ...
- leecode刷题(30)-- 二叉树的后序遍历
leecode刷题(30)-- 二叉树的后序遍历 二叉树的后序遍历 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1] 思路 ...
- 数据绑定-绑定Servlet内置对象
数据绑定:获取用户提交的参数,绑定到入参的参数中,就叫数据绑定. 绑定Servlet内置对象: 测试:
- 第三篇 HTML 表单及表格
表单及表格 表单,常用在登录.注册等地方,这也是一个最基本的. 我们就用登录,来学习什么是表单! 表单 form 标签,在某些好用的编辑工具,比如:WebStorm 你在上面写出form再按 ...