【题解】Killer Names($O(n\log n)$做法)
【题解】Killer Names(\(O(n\log n)\)做法)
感觉好久没做过这种直来直去的组合题,过来水一篇题解。还以为要写一个\(MTT\)或者三模数\(NTT\),想了想HDU这种老年机子还是算了,最后发现\(O(n^2)\)就行了
题意翻译过后就是要求一个式子:
\]
钦定两边分别出现\(i,j({m\choose i}{m-i\choose j})\)种不同的颜色,然后再随意分布\(({n\brace i}{n\brace j}i!j!)\)
感觉这很可以卷积一下,但是我们这里是小于号咋办
假设大家都会母函数和NTT和卷积,
设
\\
G(x)=\sum_{i=0}^mg_ix^i
\]
那么这个式子可以化成
\]
就构造了一个小于号出来。好我们来拆这个式子
拆出来后是这样的
\]
你以为不能拆?但是!!!!!!别忘了\(g_i\)是等于号啊,所以\(i+j=m\),所以\((m-i-j)!=1\),因此继续化简,这样我们就可以卷积了。
\]
我们不需要多项式球逆,只需要\(O(n)\)构造\(1\over 1-x\)就行,NTT求一行斯特林数也是\(O(n\log n)\)所以复杂度\(O(n\log n)\)
而且还可以加强一下,比如两边名字长度不同之类的...必须用至少\(k\)个不同的字母之类的...
但是这里模数居然不是清真的\(998244353\),所以你得写三模数NTT再CRT合并!!那对不起我赶时间还是写\(O(n^2)\)算这个式子...
//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
}
const int maxn=2e3+1;
const int mod=1e9+7;
int s[maxn][maxn];
int jc[maxn],inv[maxn];
inline int ksm(const int&ba,const int&p){
register int ret=1;
for(register int t=p,b=ba%mod;t;t>>=1,b=1ll*b*b%mod) if(t&1) ret=1ll*ret*b%mod;
return ret;
}
inline void pre(const int&n){
s[0][0]=1;
for(register int t=1;t<=n;++t)
for(register int i=1;i<=n;++i)
s[t][i]=(1ll*s[t-1][i]*i%mod+s[t-1][i-1])%mod;
inv[0]=jc[0]=1;
for(register int t=1;t<=n;++t) jc[t]=1ll*jc[t-1]*t%mod;
inv[n]=ksm(jc[n],mod-2);
for(register int t=n-1;t;--t) inv[t]=1ll*inv[t+1]*(t+1)%mod;
}
inline int c(const int&n,const int&m){
if(n<m) return 0;
return 1ll*jc[n]*inv[m]%mod*inv[n-m]%mod;
}
int n,m;
int main(){
pre(2e3);
int T=qr();
while(T--){
n=qr(); m=qr(); int ans=0,ed=min(n,m); int*S=s[n];
for(register int t=1;t<=ed;++t)
for(register int i=1;t+i<=m&&i<=n;++i)
ans=(ans+1ll*c(m,t)*c(m-t,i)%mod*S[t]%mod*S[i]%mod*jc[t]%mod*jc[i]%mod)%mod;
printf("%d\n",ans);
}
return 0;
}
【题解】Killer Names($O(n\log n)$做法)的更多相关文章
- HDU 6143 Killer Names
Killer Names Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- LeetCode subarray-sum-equals-k题解 前缀和+Hash表+枚举——线性做法
文章目录 题意 思路 连续子数组的和sum[i,j] 源码 结果记录 题意 给定一个数组,求连续的子数组的和为k的子数组个数. 思路 连续子数组的和sum[i,j] sum[i,j]=∑k=ijAk( ...
- LGP4216题解
这是一种题解没有的 \(O(m\log n)\) 做法. 首先第一步转化.设这是第 \(x\) 个任务,若 \(opt\) 为 \(1\),危险值大于 \(c\) 的只有可能在第 \(x-c-1\) ...
- GDOI2018游记&题解
day0 第一件事当然是去酒店入住+领一堆东西. 感觉酒店不错,而且离学校挺近的,走路10分钟不到,骑车5分钟就到了. 然后去学校吃饭.我们在教工饭堂吃饭,饭菜还不错,但是没有筷子差评. 吃完饭后找了 ...
- SDOI2017 Round2 详细题解
这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...
- HAOI2015 简要题解
「HAOI2015」树上染色 题意 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0 \sim N\) 之内的正整数 \(K\),你要在这棵树中选择 \(K\) 个点,将其染成黑色,并将 ...
- Codeforces Round #483 (Div. 1) 简要题解
来自FallDream的博客,未经允许,请勿转载,谢谢. 为了证明一下我又来更新了,写一篇简要的题解吧. 这场比赛好像有点神奇,E题莫名是道原题,导致有很多选手直接过掉了(Claris 表演24s过题 ...
- IOI2019题解
由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...
- CSP-S 模拟测试92 题解
话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...
随机推荐
- H5页面IOS中键盘弹出导致点击错位的问题
IOS在点击输入框弹出键盘 键盘回缩 后 定位没有相应改变 还有 textarea 也会弹出键盘 $("input").blur(function() { console.l ...
- @atcoder - AGC035E@ Develop
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定初始集合为 1 ~ N 的全集,并给定一个 K. 每次对于当 ...
- 修改Mariadb存储路径
大部分基于此文章操作:http://lddyw.blog.51cto.com/4151746/1684364 找个好久的资料,都打算源码安装了,最后终于更改成功了. 环境:CentOS6.6 64位虚 ...
- shell去掉最后一个字符
实测过第一种写法,可正常删除 sed 's/.$//' awk '{sub(/.$/,"")}1' awk '{printf $0"\b \n"}' ufile ...
- SDO_RELATE和SDO_GEOM.RELATE
SDO_RELATE需要事先建立索引,而SDO_GEOM.RELATE不用. SDO_RELATE返回True或False, SDO_GEOM.RELATE除可返回True或False外,还可返回关系 ...
- Project Euler Problem 18-Maximum path sum I & 67-Maximum path sum II
基础的动态规划...数塔取数问题. 状态转移方程: dp[i][j] = num[i][j] + max(dp[i+1][j],dp[i+1][j+1]);
- hdu 4179 Difficult Routes (SP)
Problem - 4179 坑了我一个晚上的SP题. 题意是,给出若干空间中的点,给出其中某些点之间是有直线线段路径相连的.要求求出一条从s开始到t结束的路径,它的难度是d.难度的计算是空间线段两点 ...
- 洛谷P5022 旅行 题解 去环/搜索
题目链接:https://www.luogu.org/problem/P5022 这道题目一开始看的时候没有思路,但是看到数据范围里面有一个: \(m = n-1\) 或 \(m = n\) ,一下子 ...
- H3C MP-Group方式配置PPP MP
- H3C 调试OSPF