UVALive 7040 Color
题目链接:LA-7040
题意为用m种颜色给n个格子染色。问正好使用k种颜色的方案有多少。
首先很容易想到的是\( k * (k-1)^{n-1}\),这个算出来的是使用小于等于k种颜色给n个方格染色的方案数。
我们希望求得的是使用正好k种颜色给n个方格染色的方案数,简单的想法是,直接减去小于等于k-1种颜色的方案数。
但是,要计算使用小于等于k-1种颜色染色的方案数,不能直接减去\(C_{k}^{k-1} * (k-1) * (k-2)^{n-1}\),原因是会有重复的部分。
我们用\(S_{k}\)表示使用小于等于k种颜色给n个格子染色的方案数。
则我们希望求出的答案可以用\(C_m^k * (S_k- \bigcup _{i=1} ^ {C_k^{k-1}} S_{k-1})\)来表示。
于是问题变成了求\( \bigcup _{i=1} ^ {C_k^{k-1}} S_{k-1}\),因为有重复,自然而然的我们想到容斥原理。
仔细思考后(或者列表格),发现所有\(S_{k-1}\)两两相交的并等于\(S_{k-2}\),所有\(S_{k-1}\)三三相交的并等于\(S_{k-3}\),以此类推,减加减加即可。
代码如下:
1 #include<cstring> 2 #include<cstdio> 3 #include<queue> 4 #include<algorithm> 5 #include<set> 6 #include<cmath> 7 using namespace std; 8 typedef long long LL; 9 const LL MAXK=1000000; 10 const LL MOD=1e9+7; 11 12 LL CM[MAXK+10],CK[MAXK+10],inv[MAXK+10]; 13 LL extgcd(LL a,LL b,LL &x,LL &y) 14 { 15 LL d=a; 16 if(b!=0) 17 { 18 d=extgcd(b,a%b,y,x); 19 y-=(a/b)*x; 20 } 21 else { x=1; y=0; } 22 return d; 23 } 24 //快速幂 25 //求x^n%mod 26 LL powMod(LL x,LL n,LL mod) 27 { 28 LL res=1; 29 while(n>0) 30 { 31 if(n&1) res=res*x % mod; 32 x=x*x % mod; 33 n>>=1; 34 } 35 return res; 36 } 37 //求逆元 38 //a和m应该互质 39 LL modInverse(LL a,LL m) 40 { 41 LL x,y; 42 extgcd(a,m,x,y); 43 return (m+x%m)%m; 44 } 45 LL n,m,k; 46 void init() 47 { 48 CM[0]=1; 49 for(LL i=0;i<=k-1;i++) 50 CM[i+1]=CM[i]*(m-i) %MOD *inv[i+1] % MOD; 51 CK[0]=1; 52 for(LL i=0;i<=k-1;i++) 53 CK[i+1]=CK[i]*(k-i) %MOD *inv[i+1] % MOD; 54 } 55 LL f(LL n,LL k) 56 { 57 LL ans = 0; 58 LL flag=1; 59 for(LL i=k;i>=1;i--) 60 { 61 ans = (flag * CK[i] % MOD * i % MOD * powMod(i-1,n-1,MOD) % MOD +ans + MOD ) % MOD; 62 flag*=-1; 63 } 64 ans = ans*CM[k]%MOD; 65 return ans; 66 } 67 int main() 68 { 69 #ifdef LOCAL 70 freopen("in.txt","r",stdin); 71 // freopen("out.txt","w",stdout); 72 #endif 73 for(LL i=1;i<=MAXK;i++) inv[i]=modInverse(i,MOD); 74 LL t; 75 scanf("%lld",&t); 76 for(LL tt=1;tt<=t;tt++) 77 { 78 scanf("%lld%lld%lld",&n,&m,&k); 79 init(); 80 printf("Case #%lld: %lld\n",tt,f(n,k)%MOD); 81 } 82 return 0; 83 }
转载于:https://www.cnblogs.com/zarth/p/6623433.html
UVALive 7040 Color相关推荐
- UVALive 7040 Color (容斥原理 + 组合数学递推公式 + 求逆元 + 基础数论)
传送门 英文题目: Recently, Mr. Big recieved n owers from his fans. He wants to recolor those owers with m c ...
- ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...
终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...
- ACM-ICPC 数论部分总结
数论最经典的当然是素数的判定等等吧! 素数: 埃筛--------------埃拉托斯特尼筛法,或者叫埃氏筛法 原理:如果找到一个质数,那么这个质数的倍数都不是质数 #include<cstdi ...
- RGB Color Codes Chart
RGB Color Codes Chart RGB颜色空间 RGB颜色空间或RGB颜色系统,从红色.绿色和蓝色的组合中构造所有颜色. 红色.绿色和蓝色各使用8位,它们的整数值从0到255.这使得256 ...
- DP UVALive 6506 Padovan Sequence
题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...
- 视频色彩校正简介 Introduction to Video Color Correction
视频色彩校正简介 Introduction to Video Color Correction 视频色彩校正简介 Introduction to Video Color Correction MP4 ...
- Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...
1.java.lang.Math类常用的常量和方法: Math.PI 记录的圆周率 Math.E 记录e的常量 Math.abs 求绝对值 Math.sin 正弦函数 Math.asin 反正弦函数 ...
- 给input type=color设置默认值
参考:https://stackoverflow.com/questions/14943074/html5-input-colors-default-color?utm_medium=organic& ...
- android 各种控件颜色值的设置(使用Drawable,Color)
在Android中,如果需要改变控件默认的颜色,包括值的颜色,需要预先在strings.xml中设置,类似字符串,可以反复调用.Android中颜色可以使用drawable或是color来定义. 本例 ...
最新文章
- SAP模块常用增强总结
- 不平等加剧与问责机制:纽约大学AI Now研究所2018 AI现状报告 | 报告
- TeamViewer密码存储
- 线程与进程的区别_Java线程和PC进程的区别
- Java EE 6与Spring Framework:技术决策过程
- 美团数据库高可用架构的演进与设想
- Linux debian安装Typora教程
- 很火的仿soul交友盲盒1.0全开源源码
- python最大公约数计算_使用Python求解最大公约数的实现方法
- 接口 对象 = new 实现类 与 实现类 对象= new 实现类
- 同学孩子上985大学,每月生活费5000元,大家认为合适吗?
- linux 添加raid0驱动,网众linux添加新raid驱动.doc
- 2013-06-16 读书笔记 大前研一 《无国界的世界》
- 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站「太火」了...
- 直接跳转到app store指定应用页面或评论页面
- (新手版)GitHub 使用思想,上传,首次上传及日常使用教程(肯定看得懂)
- IO复用模型同步,异步,阻塞,非阻塞及实例详解
- 对于感情的一点小感悟
- 【踩坑记录】uni-app工程转vue-cli 工程
- 详解校招算法与数据结构
热门文章
- python心得1000字-经典教材《统计学习导论》现在有了Python版
- python如何爬虫网页数据-python爬虫——爬取网页数据和解析数据
- python读取excel-蜗牛笔记-文章-Python读取Excel文件
- python在线编译-python在线编译器的简单原理及简单实现代码
- python自动测试p-python自动化测试_8
- python面试常见问题-常见Python面试题
- python语言的理解-终于明白python语言的特点是什么
- 流程的python-《流畅的 Python》到底好在哪?
- python 数据分析学什么-python数据分析学什么?python数据分析入门
- python400教程全集免费-千锋出品全套python视频教程,400大全集,你了解吗?