组合数学常见题型

一 . 选择颜色问题

问题描述:

n个人排成一个环形,每个人要从c种颜色中选择一个。
牛牛希望相邻的人选择的颜色是不同的
问有多少种方案。
输出方案数对10007取模的结果。
人是有顺序的,环旋转同构算不同的方案。

首先如果不排成环我们有c*(c-1)*(c-1)*(c-1)*(c-1)......=c*((c-1)^{n})种

连成环:c*((c-1)^{n})种其中有a1和an相同色和不同色,所以an+a[n-1]=c*((c-1)^{n}

以下为公式证明

                

公式为

(m-1)^{n}+(-1)^{n}*(m-1)   

代码 

#include<cstdio>
#include<cmath>
#include<iostream>
#include<map>
#include<cstring>
using namespace std;
#define endl "\n"
#define ll long long
const int N = 1e6 + 7;
const int mod = 10007;
ll n, m;
ll qmi(ll x, ll y) {
	ll res = 1;
	while (y) {
		if (y & 1)
			res = res * x % mod;
		x = x * x % mod;
		y >>= 1;
	}
	return res;
}
signed main() {
	cin >> n >> m;
	cout << (qmi(m-1,n)+qmi(-1,n)*(m-1)) % mod;
	return 0;
}

二 . SJECIŠTA

考虑一个有 n 个顶点的凸多边形,且这个多边形没有任何三个(或以上)的对角线交于一点。

现在请你求出这样的多边形的对角线交点个数。

P7900 [COCI2006-2007#2] SJECIŠTA - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

首先由于不会有三条(或以上)对角线交于一点,所以确定两条对角线就能确定唯一的交点。

换句话说,只要确定四个顶点就能确定一的交点。

那么这道题就变成了求出从 n 个点中取 4 个点的方案数。

由于第一个点有 n 种取法,第二个点有n−1 种取法,第三个点有 n−2 种取法,第四个点有 n−3 种取法,又因为改变四个点的顺序不会改变对角线,所以还要除以 4 个点的取法数,也就是除以 4!(1×2×3×4)。

于是就可以推出公式: n×(n−1)×(n−2)×(n−3)÷1÷2÷3÷4

void solve() {
	int n;
	cin >> n;
	int res = 1;
	for (int i = 1; i <= 4; i++) {
		res = res * (n - 4 + i) / i;
	}
	cout << res;
}

3.

还会陆续更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Smile灬凉城666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值