AtCoder Beginner Contest 172 E - NEQ

题意:

求满足下列条件的长度为 NNN且包含 [1,M][1, M][1,M]范围内整数的序列 A1,A2,⋯,ANA_1, A_2, \cdots, A_NA1​,A2​,⋯,AN​及 B1,B2,⋯,BNB_1, B_2, \cdots, B_NB1​,B2​,⋯,BN​组成的序列对数量。

  • ∀1≤i<j≤N,Ai≠Aj∧Bi≠Bj\forall 1 \le i \lt j \le N, \; A_i \neq A_j \land B_i \neq B_j∀1≤i<j≤N,Ai​​=Aj​∧Bi​​=Bj​
  • ∀1≤i≤N,Ai≠Bi\forall 1 \le i \le N, \; A_i \neq B_i∀1≤i≤N,Ai​​=Bi​

分析:

条件① —— 保证序列A, B内所有数唯一 很好满足,接下来看条件② —— 序列A, B的对应位置的数不同

显然要让对应位置的数不同情况会很复杂,但至多有KKK个位置的数不同的情况却很容易求解,因为这等价于有 至少N−KN-KN−K个位置的数相同

设:
f(K)f(K)f(K):序列内各数唯一且至多有 KKK个对应位置的数不同(至少 N−KN-KN−K个对应位置的数相同)的情况数;
g(K)g(K)g(K):序列内各数唯一且恰有KKK个特定的对应位置的数不同的情况数;

易得:
f(N)=∑K=0N(NK)g(K)f(N) =\sum_{K=0}^N \binom{N}{K}g(K)f(N)=K=0∑N​(KN​)g(K)根据二项式反演可得:
g(N)=∑K=0N(−1)N−K(NK)f(K)g(N) = \sum_{K=0}^N (-1)^{N-K} \binom{N}{K} f(K)g(N)=K=0∑N​(−1)N−K(KN​)f(K)则答案即为g(N)。g(N)。g(N)。

根据至少 N−KN-KN−K个对应位置的数相同,可知 f(K)=PMN−K×(PM−N+KK)2f(K) = P_M^{N-K} \times (P_{M-N+K}^K)^2f(K)=PMN−K​×(PM−N+KK​)2

最终答案如下:
g(N)=∑K=0N(−1)N−K(NK)PMN−K×(PM−N+KK)2g(N) = \sum_{K=0}^N (-1)^{N-K} \binom{N}{K} P_M^{N-K} \times (P_{M-N+K}^K)^2g(N)=K=0∑N​(−1)N−K(KN​)PMN−K​×(PM−N+KK​)2


代码:

#include <bits/stdc++.h>
#define lowbit(x) ((x)&(-(x)))
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const int maxn = 5e5 + 10;
int N, M;
LL fact[maxn], fact_inv[maxn];
LL qpow(LL a, LL b)
{LL res = 1;a %= MOD;while(b){if(b & 1)res = res * a % MOD;a = a * a % MOD;b >>= 1;}return res;
}
void preprocess()
{fact[0] = 1;for(int i = 1; i <= M; i++)fact[i] = fact[i-1] * i % MOD;fact_inv[M] = qpow(fact[M], MOD - 2);for(int i = M; i >= 1; i--)fact_inv[i-1] = fact_inv[i] * i % MOD;
}
LL comb(int a, int b)
{if(a < 0 || b < 0 || a < b)return 0;elsereturn fact[a] * fact_inv[b] % MOD * fact_inv[a-b] % MOD;
}
LL perm(int a, int b)
{if(a < 0 || b < 0 || a < b)return 0;elsereturn fact[a] * fact_inv[a-b] % MOD;
}
int main()
{scanf("%d %d", &N, &M);preprocess();LL ans = 0;for(int K = 0; K <= N; K++)ans = (ans +  qpow(-1, N - K) * comb(N, K) % MOD * perm(M, N - K) % MOD * qpow(perm(M - N + K, K), 2) % MOD) % MOD;printf("%lld\n", (ans % MOD + MOD) % MOD);return 0;
}

AtCoder Beginner Contest 172 E - NEQ(二项式反演)相关推荐

  1. AtCoder Beginner Contest 172总结

    A-calc 直接按照题目输出就行 #include<iostream> using namespace std; int main() {ios::sync_with_stdio(fal ...

  2. AtCoder Beginner Contest 172 总结

    颓了三天端午回来打比赛,还是秒切前几道水题但做不动后面的难题,任重道远啊. 前四题思路都比较简单,C枚举一个数组的前缀和并用差值在另外一个数组里二分查找,D可以线性筛约数个数函数然后暴力算,也可以分析 ...

  3. AtCoder Beginner Contest 190 E.Magical Ornament

    AtCoder Beginner Contest 190 E.Magical Ornament 题目链接 这场我觉得 E E E 要比 F F F 难点,因为 E E E 比较难看出来是 BFS+状压 ...

  4. AtCoder Beginner Contest 286——E - Souvenir

    AtCoder Beginner Contest 286 题目讲解 A题 B题 C题 D题 E题 蒟蒻来讲题,还望大家喜.若哪有问题,大家尽可提! Hello, 大家好哇!本初中生蒟蒻今天讲解一下At ...

  5. AtCoder Beginner Contest 202 D - aab aba baa(组合计数,字典序)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Problem 有 AAA 和 aaa,BBB 个 bbb ,可以使用这 A+BA+BA+B 个字符任 ...

  6. AtCoder Beginner Contest 197 题解(A ~ F)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A - Rotate B - Visibility C - ORXOR D - Opposite ...

  7. AtCoder Beginner Contest 198 (A ~ F)题解

    目录 A. Div B. Palindrome with leading zeros C. Compass Walking D. Send More Money E. Unique Color F. ...

  8. AtCoder Beginner Contest 215 G - Colorful Candies 2

    AtCoder Beginner Contest 215 G - Colorful Candies 2 有n个糖果,每个糖果有着一个颜色a[i],每次拿k个糖果期望拿到E(x)个不同颜色的糖果,求出k ...

  9. AtCoder Beginner Contest 215 F - Dist Max 2

    AtCoder Beginner Contest 215 F - Dist Max 2 平面上有一系列的点(xi,yi)(x_i,y_i)(xi​,yi​),定义两点(xi,yi),(xj,yj)(x ...

最新文章

  1. np.dot()运算准则
  2. 浅谈Android四大组件之Service
  3. R语言ggplot2可视化散点图、并以与y=0为界绘制基于散点包围的多边形(ploygon)、对于y=0坐标轴的上方和下方的多边形分别使用不同的颜色进行填充
  4. Linux下配置汇编编译器NASM和bochs模拟器
  5. Gstreamer基础知识介绍
  6. Hibernate中Session的清理与清空
  7. klearn 文本分类_使用gensim和sklearn搭建一个文本分类器
  8. Oracle入门(九A)之用户的权限或角色
  9. 前端学习(2095):数组里面得方法哪些
  10. HTML+CSS+JS实现 ❤️canvas酷炫表白爱心动画❤️
  11. Cookie、Session 和 Token区别
  12. vue过滤器的那点事
  13. 转载-常用邮箱SMTP服务器地址大全
  14. 如何优化淘宝直通车推广创意标题
  15. 软件、Chrome字体细到模糊发虚解决方案
  16. 【简单应用】STC8+OLED(4P)显示
  17. 【信道编码/Channel Coding】CRC校验码
  18. win10+ubuntu18.04lts:在已安装win10环境中利用EasyBCD引导安装Ubuntu
  19. React 重新渲染指南
  20. iptables之nat表的学习和实验

热门文章

  1. 不是所有的战略规划都可以用BLM
  2. cs224w(图机器学习)2021冬季课程学习笔记16 Community Detection in Networks
  3. Freeswitch服务+语音网关设备发送短信功能
  4. 用心行走——《做最好的新教师》读后感3200字
  5. objective-c感悟(四)class、catagory、class extension、optional
  6. Mac/MacBookPro解决系统升级后运行卡顿问题(非配置问题)
  7. 趣头条“瘦身”减负?
  8. 这些道理不懂,你注定就是穷打工的命
  9. Windows下自动同步工具SyncToy的使用与定时执行部署
  10. 在linux上安装微信