2021.8.9提高B组模拟1T4 着色(组合数学)

Posted SSL_LKJ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2021.8.9提高B组模拟1T4 着色(组合数学)相关的知识,希望对你有一定的参考价值。

着色

题目大意

输入样例

1.

2 2

2.

5 3

3.

7 3

输出样例

1.

0

2.

12

3.

96

题目数据

题目提示

解题思路

每一个图每一个图去弄

得出规律求答案

可以先用组合数学求出 从k种颜色里选 2 和 3 2和3 23 种颜色的方案数

例如第一个图

每两个颜色就有两种情况

每三个颜色的时候,就可以设头有三种情况,剩下的身体、尾巴就都只有两种情况,再相乘

三种情况最后的时候要-6

因为,假如有三个数,分别为 1  2  3

他不只是可以组成 1 2 3 2 1 2 3 ……

还可以 1 2 1 2 ……、 2 1 2 1 …… 、1 3 1 3 ……、 3 1 3 1 ……、2 3 2 3 ……、3 2 3 2 .

而这些是前面选两个颜色的时候求过的了

因此,要减去重复的6

AC代码

#include<cstdio>
using namespace std;
long long n,k;
int main()

	freopen("color.in","r",stdin);
	freopen("color.out","w",stdout);
	scanf("%lld%lld",&n,&k);
	long long C2=k*(k-1)/2,C3=k*(k-1)*(k-2)/6;  // 预处理
	
	if(n==1)printf("%lld",C2*2+C3*(3*(1<<19)-6));  // 每种情况分类讨论
		
	if(n==2)printf("%lld",C3*96);
		
	if(n==3)printf("%lld",C2*2+C3*18);
		
	if(n==4)printf("%lld",C2*2+C3*(3*(1<<13)-6));
		
	if(n==5)printf("%lld",C3*12);
		
	if(n==6)printf("%lld",C3*6);
		
	if(n==7)printf("%lld",C3*96);
		
	if(n==8)printf("%lld",C2*2+C3*1073741820);
			
	return 0;

谢谢

以上是关于2021.8.9提高B组模拟1T4 着色(组合数学)的主要内容,如果未能解决你的问题,请参考以下文章

2021.7.12提高B组模拟1T4 Vani和Cl2捉迷藏(最大匹配)

2021.8.9提高B组模拟1T3 平均数(二分)(贪心)

2021.8.9提高B组模拟1T1 最长公共回文子序列(dfs)

2021.8.9提高B组模拟1T3 平均数(二分)(贪心)

2021.8.9提高B组模拟1T1 最长公共回文子序列(dfs)

2021.8.9提高B组模拟1T2 QYQ在艾泽拉斯(Tarjan强连通分量)(并查集)