【题解】Killer Names(\(O(n\log n)\)做法)

HDU - 6143

感觉好久没做过这种直来直去的组合题,过来水一篇题解。还以为要写一个\(MTT\)或者三模数\(NTT\),想了想HDU这种老年机子还是算了,最后发现\(O(n^2)\)就行了

题意翻译过后就是要求一个式子:

\[\sum_{i+j\le m}{m\choose i}{m-i\choose j}{n\brace i}{n\brace j}i!j!
\]

钦定两边分别出现\(i,j({m\choose i}{m-i\choose j})\)种不同的颜色,然后再随意分布\(({n\brace i}{n\brace j}i!j!)\)

感觉这很可以卷积一下,但是我们这里是小于号咋办

假设大家都会母函数和NTT和卷积,

\[g_i=\sum_{i+j= m}{m\choose i}{m-i\choose j}{n\brace i}{n\brace j}i!j!
\\
G(x)=\sum_{i=0}^mg_ix^i
\]

那么这个式子可以化成

\[G(x){(1+x+x^2+x^3\dots)}=G(x){1\over 1-x}
\]

就构造了一个小于号出来。好我们来拆这个式子

拆出来后是这样的

\[\sum_{i+j\le m}{m!\over (m-i-j)!}{n\brace i}{n\brace j}
\]

你以为不能拆?但是!!!!!!别忘了\(g_i\)是等于号啊,所以\(i+j=m\),所以\((m-i-j)!=1\),因此继续化简,这样我们就可以卷积了。

\[\dfrac {g_i} {m!}=\sum_{i+j=m}{n\choose i}{n\choose j}
\]

我们不需要多项式球逆,只需要\(O(n)\)构造\(1\over 1-x\)就行,NTT求一行斯特林数也是\(O(n\log n)\)所以复杂度\(O(n\log n)\)

而且还可以加强一下,比如两边名字长度不同之类的...必须用至少\(k\)个不同的字母之类的...

但是这里模数居然不是清真的\(998244353\),所以你得写三模数NTT再CRT合并!!那对不起我赶时间还是写\(O(n^2)\)算这个式子...

  1. //@winlere
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<cstring>
  5. #include<algorithm>
  6. using namespace std; typedef long long ll;
  7. inline int qr(){
  8. register int ret=0,f=0;
  9. register char c=getchar();
  10. while(c<48||c>57)f|=c==45,c=getchar();
  11. while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
  12. return f?-ret:ret;
  13. }
  14. const int maxn=2e3+1;
  15. const int mod=1e9+7;
  16. int s[maxn][maxn];
  17. int jc[maxn],inv[maxn];
  18. inline int ksm(const int&ba,const int&p){
  19. register int ret=1;
  20. for(register int t=p,b=ba%mod;t;t>>=1,b=1ll*b*b%mod) if(t&1) ret=1ll*ret*b%mod;
  21. return ret;
  22. }
  23. inline void pre(const int&n){
  24. s[0][0]=1;
  25. for(register int t=1;t<=n;++t)
  26. for(register int i=1;i<=n;++i)
  27. s[t][i]=(1ll*s[t-1][i]*i%mod+s[t-1][i-1])%mod;
  28. inv[0]=jc[0]=1;
  29. for(register int t=1;t<=n;++t) jc[t]=1ll*jc[t-1]*t%mod;
  30. inv[n]=ksm(jc[n],mod-2);
  31. for(register int t=n-1;t;--t) inv[t]=1ll*inv[t+1]*(t+1)%mod;
  32. }
  33. inline int c(const int&n,const int&m){
  34. if(n<m) return 0;
  35. return 1ll*jc[n]*inv[m]%mod*inv[n-m]%mod;
  36. }
  37. int n,m;
  38. int main(){
  39. pre(2e3);
  40. int T=qr();
  41. while(T--){
  42. n=qr(); m=qr(); int ans=0,ed=min(n,m); int*S=s[n];
  43. for(register int t=1;t<=ed;++t)
  44. for(register int i=1;t+i<=m&&i<=n;++i)
  45. ans=(ans+1ll*c(m,t)*c(m-t,i)%mod*S[t]%mod*S[i]%mod*jc[t]%mod*jc[i]%mod)%mod;
  46. printf("%d\n",ans);
  47. }
  48. return 0;
  49. }

【题解】Killer Names($O(n\log n)$做法)的更多相关文章

  1. HDU 6143 Killer Names

    Killer Names Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Tota ...

  2. LeetCode subarray-sum-equals-k题解 前缀和+Hash表+枚举——线性做法

    文章目录 题意 思路 连续子数组的和sum[i,j] 源码 结果记录 题意 给定一个数组,求连续的子数组的和为k的子数组个数. 思路 连续子数组的和sum[i,j] sum[i,j]=∑k=ijAk( ...

  3. LGP4216题解

    这是一种题解没有的 \(O(m\log n)\) 做法. 首先第一步转化.设这是第 \(x\) 个任务,若 \(opt\) 为 \(1\),危险值大于 \(c\) 的只有可能在第 \(x-c-1\) ...

  4. GDOI2018游记&题解

    day0 第一件事当然是去酒店入住+领一堆东西. 感觉酒店不错,而且离学校挺近的,走路10分钟不到,骑车5分钟就到了. 然后去学校吃饭.我们在教工饭堂吃饭,饭菜还不错,但是没有筷子差评. 吃完饭后找了 ...

  5. SDOI2017 Round2 详细题解

    这套题实在是太神仙了..做了我好久...好多题都是去搜题解才会的 TAT. 剩的那道题先咕着,如果省选没有退役就来填吧. 「SDOI2017」龙与地下城 题意 丢 \(Y\) 次骰子,骰子有 \(X\ ...

  6. HAOI2015 简要题解

    「HAOI2015」树上染色 题意 有一棵点数为 \(N\) 的树,树边有边权.给你一个在 \(0 \sim N\) 之内的正整数 \(K\),你要在这棵树中选择 \(K\) 个点,将其染成黑色,并将 ...

  7. Codeforces Round #483 (Div. 1) 简要题解

    来自FallDream的博客,未经允许,请勿转载,谢谢. 为了证明一下我又来更新了,写一篇简要的题解吧. 这场比赛好像有点神奇,E题莫名是道原题,导致有很多选手直接过掉了(Claris 表演24s过题 ...

  8. IOI2019题解

    由于太懒了,好久没更新了.发个题解好了. shoes 首先不难证明鞋子配对一定是从前往后将同一种的左和右配对. 配好对之后首先我们可以假设左在右的左边,然后讨论可知将左边靠前的排在前面更优. rect ...

  9. CSP-S 模拟测试92 题解

    话说我怎么觉得我没咕多长时间啊,怎么就又落了20多场题解啊 T1 array: 根据题意不难列出二元一次方程,于是可以用exgcd求解,然而还有一个限制条件就是$abs(x)+abs(y)$最小,这好 ...

随机推荐

  1. How to use AutoMapper

    http://docs.automapper.org/en/stable/Getting-started.html IMappingExpression<TSource, TDestinatio ...

  2. linux centos 一键安装环境

    phpStudy for Linux 支持Apache/Nginx/Tengine/Lighttpd, 支持php5.2/5.3/5.4/5.5切换 已经在centos-6.5,debian-7.4. ...

  3. @雅礼集训01/06 - T3@ math

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 给出 n, m, x,你需要求出下列式子的值: \[\sum_{ ...

  4. OpenResty,X-WAF防火墙相关

    >>OpenResty<< >>Lua教程<< >>反向代理百度百科<< >>X-WAF配置指南<<

  5. em&rem

    PX特点 1. IE无法调整那些使用px作为单位的字体大小: 2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位: 3. Firefox能够调整px和em,rem px像素(Pi ...

  6. jieba完整文档

    jieba “结巴”中文分词:做最好的 Python 中文分词组件 "Jieba" (Chinese for "to stutter") Chinese tex ...

  7. Logback设置SQL参数打印

    一.hibernate中设置SQL参数打印: (主要是第一句) <logger name="org.hibernate.type.descriptor.sql.BasicBinder& ...

  8. Codeforces Round #170 (Div. 1 + Div. 2)

    A. Circle Line 考虑环上的最短距离. B. New Problem \(n\) 个串建后缀自动机. 找的时候bfs一下即可. C. Learning Languages 并查集维护可以沟 ...

  9. 条件随机场(CRF) - 4 - 学习方法和预测算法(维特比算法)

    声明: 1,本篇为个人对<2012.李航.统计学习方法.pdf>的学习总结,不得用作商用,欢迎转载,但请注明出处(即:本帖地址). 2,由于本人在学习初始时有很多数学知识都已忘记,所以为了 ...

  10. thinkphp3.2.3中设置路由,优化url

    需求: 访问这个目录的时候,http://xx.com/p-412313要重定向到(暂且这么叫)http://xx.com/Home/Blog/index/id/412313 就是看着好看 我的应用目 ...