题目链接: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相关推荐

  1. UVALive 7040 Color (容斥原理 + 组合数学递推公式 + 求逆元 + 基础数论)

    传送门 英文题目: Recently, Mr. Big recieved n owers from his fans. He wants to recolor those owers with m c ...

  2. ACM数论之旅17---反演定理 第一回 二项式反演(神说要有光 于是就有了光(´・ω・`))...

    终于讲到反演定理了,反演定理这种东西记一下公式就好了,反正我是证明不出来的~(-o ̄▽ ̄)-o 首先,著名的反演公式 我先简单的写一下o( ̄ヘ ̄*o) 比如下面这个公式 f(n) = g(1) + g ...

  3. ACM-ICPC 数论部分总结

    数论最经典的当然是素数的判定等等吧! 素数: 埃筛--------------埃拉托斯特尼筛法,或者叫埃氏筛法 原理:如果找到一个质数,那么这个质数的倍数都不是质数 #include<cstdi ...

  4. RGB Color Codes Chart

    RGB Color Codes Chart RGB颜色空间 RGB颜色空间或RGB颜色系统,从红色.绿色和蓝色的组合中构造所有颜色. 红色.绿色和蓝色各使用8位,它们的整数值从0到255.这使得256 ...

  5. DP UVALive 6506 Padovan Sequence

    题目传送门 /*题意:两行数字,相邻列一上一下,或者隔一列两行都可以,从左到右选择数字使和最大DP:状态转移方程:dp[i][j] = max (dp[i][j], dp[1-i][j-1] + a[ ...

  6. 视频色彩校正简介 Introduction to Video Color Correction

    视频色彩校正简介 Introduction to Video Color Correction 视频色彩校正简介 Introduction to Video Color Correction MP4 ...

  7. Android 中一些常用类的常用方法(Math、Random、Color、Paint、Canvas、Bitmap、BitmapFactory)...

    1.java.lang.Math类常用的常量和方法: Math.PI 记录的圆周率 Math.E 记录e的常量 Math.abs 求绝对值 Math.sin 正弦函数 Math.asin 反正弦函数 ...

  8. 给input type=color设置默认值

    参考:https://stackoverflow.com/questions/14943074/html5-input-colors-default-color?utm_medium=organic& ...

  9. android 各种控件颜色值的设置(使用Drawable,Color)

    在Android中,如果需要改变控件默认的颜色,包括值的颜色,需要预先在strings.xml中设置,类似字符串,可以反复调用.Android中颜色可以使用drawable或是color来定义. 本例 ...

最新文章

  1. SAP模块常用增强总结
  2. 不平等加剧与问责机制:纽约大学AI Now研究所2018 AI现状报告 | 报告
  3. TeamViewer密码存储
  4. 线程与进程的区别_Java线程和PC进程的区别
  5. Java EE 6与Spring Framework:技术决策过程
  6. 美团数据库高可用架构的演进与设想
  7. Linux debian安装Typora教程
  8. 很火的仿soul交友盲盒1.0全开源源码
  9. python最大公约数计算_使用Python求解最大公约数的实现方法
  10. 接口 对象 = new 实现类 与 实现类 对象= new 实现类
  11. 同学孩子上985大学,每月生活费5000元,大家认为合适吗?
  12. linux 添加raid0驱动,网众linux添加新raid驱动.doc
  13. 2013-06-16 读书笔记 大前研一 《无国界的世界》
  14. 深度学习三巨头也成了大眼萌,这个一键转换动画电影形象的网站「太火」了...
  15. 直接跳转到app store指定应用页面或评论页面
  16. (新手版)GitHub 使用思想,上传,首次上传及日常使用教程(肯定看得懂)
  17. IO复用模型同步,异步,阻塞,非阻塞及实例详解
  18. 对于感情的一点小感悟
  19. 【踩坑记录】uni-app工程转vue-cli 工程
  20. 详解校招算法与数据结构

热门文章

  1. python心得1000字-经典教材《统计学习导论》现在有了Python版
  2. python如何爬虫网页数据-python爬虫——爬取网页数据和解析数据
  3. python读取excel-蜗牛笔记-文章-Python读取Excel文件
  4. python在线编译-python在线编译器的简单原理及简单实现代码
  5. python自动测试p-python自动化测试_8
  6. python面试常见问题-常见Python面试题
  7. python语言的理解-终于明白python语言的特点是什么
  8. 流程的python-《流畅的 Python》到底好在哪?
  9. python 数据分析学什么-python数据分析学什么?python数据分析入门
  10. python400教程全集免费-千锋出品全套python视频教程,400大全集,你了解吗?