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 2和3 种颜色的方案数
例如第一个图
每两个颜色就有两种情况
每三个颜色的时候,就可以设头有三种情况,剩下的身体、尾巴就都只有两种情况,再相乘
三种情况最后的时候要-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组模拟1T1 最长公共回文子序列(dfs)