cf/Codeforces Gym 100548F Color (2014年西安站F题) (容斥原理)
来源:互联网 发布:消费者数据分析 编辑:程序博客网 时间:2024/05/19 11:44
题目大意:直线上给n个物品染色,一共有m种颜色,求恰好用了k种颜色的染色方案数解析:首先选出k种颜色,选法C(m,k), 那么对于不超过k种颜色的涂色方案数为 f[k]= k*(k-1)^(n-1) 表示第一个有k种选择,后面的全都是k-1种选择 。 这里面包含了 k=1,2,3,......k的全部情况ps: 最开始智障了,觉得f[k]-f[k-1]不显然就是答案了吗。。nc啊。。。ps: 明显在选出了k种颜色的条件下,f[k]为不超过k种颜色的所有方案,那么就是要减去不超过k-1种颜色的所有方案,但是k种颜色里选k-1种又有一个 C(k,k-1),所以应该减去的是C(k,k-1)*f(k-1),而显然这样f(k-2)那些又会被减掉了需要加回来,加加减减就是一眼容斥原理啦已选出k种颜色后,那么对于最后涂了不超过i种(2<=i<=k-1)颜色的方案数为g[i]= C(k,i)* i*(i-1)^(n-1)所以对于选出来的k种颜色下,我们要染恰好k个颜色的合法方案数应该为ans[k]= f[k] -g[k-1] +g[k-2]-g[k-3]........ 最后答案为 c(m,k)*ans[k] 由于算g[i]之和时要用到一个c[k]【i】然后最后算答案要求一个C【m】【k】p又特别大 (1e9+7)lucas预处理p的那种肯定不行,直接算的单case的又太慢了注意到C几几的第二项比较小,只有k,则可以用O(K)去算出所有的组合数,公式:c(n,k+1)=c(n,k)*(n-k)/(1+k) 那么就预处理1到k的逆元整体复杂度O(K)
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const ll p =1000000007; ll fast_m(ll a,ll b) { ll x,ans=1; x=a; while(b) { if (b&1) ans=(ans*x)%p; x=(x*x)%p; b/=2; } return ans; } ll n,m,k; ll inv[1000000+5]; void Init_inv() { for(int i = 1; i < 1e6+50; i++) inv[i] = fast_m(i, p - 2); } ll c[1000000+50]; void cal(ll n) { c[0] = 1; for(int i = 1; i <= k; i++) c[i] = ((c[i - 1] * (n - i + 1) % p) * inv[i] % p) % p; } ll f(ll k) { return k*fast_m(k-1,n-1)%p; } int main() { Init_inv(); int t; cin>>t; int cnt=1; while(t--) { scanf("%lld%lld%lld",&n,&m,&k); cal(k); ll ansk=f(k); for (int i=2; i<=k-1; i++) { if ((k-i)%2) ansk=(ansk-c[i]*f(i)%p )%p; else ansk=(ansk+ (c[i]*f(i)) %p) %p; } cal(m); printf("Case #%d: %lld\n",cnt++, (c[k]*ansk%p+p)%p); } return 0; }
阅读全文
0 0
- cf/Codeforces Gym 100548F Color (2014年西安站F题) (容斥原理)
- cf/Codeforces Gym 100548F Color (容斥原理)
- Codeforces GYM 100548 F - Color (2014年西安站F题)
- CF GYM 100548 Color(2014ACM西安现场赛Problem F)
- CF GYM 100548 Color(2014ACM西安现场赛Problem F)
- uvalive7040 / cf gym 100548 Color(2014 ICPC 西安 F)
- uvalive7040 / cf gym 100548 Color(2014西安区域赛F题)
- 2014 xi'an Problem F. Color (Gym 100548F) 容斥原理
- Codeforces Gym 100548F Color (组合数+容斥)
- Codeforces Gym 100548F Color (组合数+容斥)
- 2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)
- 2014ACM/ICPC亚洲区西安站现场赛 F color(转换角度+容斥)
- CF 803 F Coprime Subsequences (容斥原理)
- codeforces 803F Coprime Subsequences (容斥原理)
- Codeforces gym 100548 F (2014-2015 icpc西安现场赛) 数学
- CF 803 F. Coprime Subsequences(数论题,莫比乌斯,容斥原理)
- Gym - 100625F Count Ways 快速幂+容斥原理
- Codeforces GYM 100548 F - Color 2014-2015 ACM-ICPC, Asia Xian Regional Contest
- Linux系统下兼容多版本OpenCV的方法
- org.apache.http.client不存在,android6.0不支持Apache Http
- 文章标题
- 6-3 PTA求链式表的表长
- redis详解-(9)主从复制
- cf/Codeforces Gym 100548F Color (2014年西安站F题) (容斥原理)
- cocoaPods安装2017 以及遇到的坑
- 数据仓库基本知识
- STM32使用J-Link的SWD接口调试出现Supply voltage is too low问题的解决办法
- UVALive 3263 That Nice Euler Circuit
- spring学习入门
- 九九乘法表
- Win10+Anaconda+python3.6安装Tensorflow
- 文件下载