noip专题复习之数学(6)——置换及其应用

1.基本概念:

简单来说,置换就是把n个元素做一个全排列。比如1,2,3,4分别变成3,1,2,4,或者分别变成4,3,2,1.一般地,1变a1,2变a2,...的置换记为:
\[
\left(
\begin{matrix}
1 & 2\cdots & n\a_1 & a_2\cdots & a_n\\end{matrix}
\right)
\]
置换实际上就是一一映射,

? (1)可以用一个数组f={a1,a2,...,an}来表示1~n的一个置换,其中f[i]表示元素i所映射到的(f[0]未使用)。

? (2)这个f也可以看作是定义域和值域都为{1,2,3,...,n}的函数,其中f(1)=a1,f(2)=a2,f(3)=a3,...,f(n)=an。由于不同元素映射到不同的数,这个函数是可逆的。

? 置换之间可以定义乘法,对应于函数复合。

比如置换f={1,3,2}和g={2,1,3},乘积fg={2,3,1},因为各个元素的变化为1->1->2,2->3->3,3->2->1。

在数学上函数复合满足结合律,故置换乘法也满足结合律。注意:置换乘法不满足交换律。

? 为了处理方便,常把置换分解成循环的乘积,比如:
\[
\left(
\begin{matrix}
1&2&3&4&5\3&5&1&4&2\\end{matrix}
\right)=(1\quad3)(2\quad5)(4)
\]
为什么任意置换都能这样分解呢?把每个元素看成是一个结点,如果a变成b,连一条有向边a->b,则每个元素恰好有一个前驱结点和后继结点(因为它一定只映射了一个数,也一定只有一个数映射为它,否则置换后的数就不再是1~n中的每一个数了,会有数的缺失),这样的图只能是若干个有向圈,其中每一个圈对应一个循环。

虽然在一般情况下,置换乘法不满足交换律,但对于不相交的循环来说,按照任意顺序相乘都是等价的。

我们称循环分解中中循环的个数为该置换的循环节。比如(1 3)(2 5)(4)的循环节为3。

2.等价类计数问题

? 经典问题:在2*2的方格中涂黑白两色,有几种方法?

? 答案:16种。

? 但如果定义一种旋转操作,规定逆时针旋转90度,180度或者270度后相同的方案算作一种,那么答案就变成了6种了。

这样的问题称为等价类计数问题。

题目中会定义一种等价关系,满足等价关系的元素被看成同一类,只统计一次

等价关系需要满足自反性(每个元素和它自身等价)、对称性(如果A和B等价,则B和A等价)和传递性(如果A和B等价,B和C等价,则A和C等价)。

为了统计等价类的个数,首先需要用一个置换集合F来描述等价关系。如果一个置换把其中一个方案映射到另一个方案,就说二者是等价的。注意:F中任意两个置换的乘积也应当在F中,否则F无法构成置换群。如:F={逆时针旋转0度,逆时针旋转90度,逆时针旋转270度}的定义是不合法的,因为两个逆时针旋转90度,即为逆时针旋转180度,而F中却并没有定义逆时针旋转180度。

Burnside定理:对于一个置换f,若一个着色方案s经过置换后不变,称s为f的不动点。将f的不动点数目记为C(f),则可以证明等价类数目为所有C(f)的平均值。

如何求不动点C(f)的数目呢?一般地,如果置换f分解成m(f)个循环的乘积,那么每个循环内所有格子的颜色必须相同,假设涂k种颜色,则有C(f)=k^(m(f))。带入Burnside引理的表达式之后得到Polya定理。

Polya定理:等价类的个数等于所有置换f的k^(m(f))的平均数。

例题:项链和手镯(Arif in Dhaka(First Love Part 2))

题意:用n颗宝石串成项链和手镯, 每颗宝石的颜色可以t种颜色中的一种,当A类项链经过旋转得B类项链时,A和B属于一类项链, 而手镯不仅可以旋转还可以翻转,当A类手镯经过翻转得到B类手镯时A和B属于一类手镯,问这n颗宝石,t种颜色,可以串成多少种项链和手镯?

分析:旋转:如果逆时针旋转i颗珠子的间距,则珠子0,i,2i,...构成一个循环。设该循环共有k个元素,则(ik)%n=0(回到最初的0),所以i k=n * y,等式两边的值应为lcm(n,i),故i*k=lcm(n,i)=

n * i/gcd(n,i),故可求得k=n/gcd(n,i)。根据对称性,1,2i+1,...也构成循环,每个循环的长度都相同,共有n个数,一个循环的长度为n/gcd(n,i),故循环的个数为gcd(n,i)。这些置换的不动点的个数为:
\[
a=\sum_{i=0}^{n-1}t^{gcd(i,n)}
\]
翻转:当n为奇数时,对称轴有n条(分别过每一个珠子做一条对称轴),每条对称轴形成了(n-1)/2个长度为2的循环(关于对称轴对称的两个点构成一个循环,再减去在对称轴上的那个点)和1个长度为1的循环,即(n+1)/2个循环。这些置换的不动点的总数为
\[
b=nt^{\frac{n+1}{2}}
\]
当n为偶数时,有两种对称轴,穿过珠子的有n/2条,各形成n/2-1个长度为2的循环和2个长度为1的循环;不穿过珠子的对称轴有n/2条,各形成n/2个长度为2的循环。这些置换的不动点的总数为
\[
b=\frac{n}{2}(t^{\frac{n}{2}+1}+t^{\frac{n}{2}})
\]
根据Polya定理,项链等价类总数为a/n,手镯等价类的总数为(a+b)/2n。

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=55;

int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}

int main()
{
    int n,t;
    while(scanf("%d%d",&n,&t)==2&&n)
    {
        LL pow[maxn];
        pow[0]=1;
        for(int i=1;i<=n;++i) pow[i]=pow[i-1]*t;
        LL a=0;
        for(int i=0;i<n;++i) a+=pow[gcd(n,i)];
        LL b=0;
        if(n%2==1) b=n*pow[(n+1)/2];
        else b=n/2*(pow[n/2+1]+pow[n/2]);
        printf("%lld %lld\n",a/b,(a+b)/2/n);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/iwillenter-top1/p/11622017.html

时间: 2024-07-31 10:58:03

noip专题复习之数学(6)——置换及其应用的相关文章

noip专题复习之数学(5)——概率与数学期望

1.全概率公式: 将样本分成若干个不相交的部分B1,B2,...,Bn,则P(A)=P(A|B1)P(B1)+P(A|B2) P(B2)+...+P(A|Bn)*P(Bn).(P(A|B)是指在B事件发生的条件下,事件A发生的概率. 使用全概率公式的关键是"划分样本空间",只有把所有可能不重不漏地进行分类,并算出每个分类下事件发生的概率,才能得出该事件发生的总概率. 2.数学期望: 简单地说,随机变量X的数学期望EX就是所有可能值按照概率加权的和. 比如一个随机变量有1/2的概率为1,

splay专题复习——bzoj 3224 &amp; 1862 &amp; 1503 题解

[前言]快要省选二试了.上次去被虐出翔了~~这次即便是打酱油,也要打出风采!于是暂停新东西的学习,然后开始复习以前的知识,为骗分做准备.PS:区间翻转的暂时跳过,就算学了也来不及巩固了. [BZOJ3224] 3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1477  Solved: 570 Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入

noip复习之数学(4)——组合游戏

我们在此专题中将考虑这样一类组合游戏: (1)两个游戏者轮流操作 (2)游戏的状态集有限,并且不管双方怎么走,都不会再出现以前的状态.这保证了游戏在有限步内结束. (3)谁不能操作谁输,这样的规则避免了平局的出现. 而且我们只考虑公平游戏,即如果一个游戏者可以把状态A变为B,另一个游戏者也可以.国际象棋并不是公平游戏,因为白方可以移动白子,而黑方却不能移动白子. 状态图:为方便描述,我们可以把游戏中的状态画成图.每个节点是一个状态,每条边代表从一个状态转移到另一个状态的操作. 注意:先手必胜状态

noip复习之数学(3)——数论

1.基本概念和常用代码 (1)素数(质数) int prime[maxn],tot=0; bool vis[maxn]; void init(int n) { vis[1]=1; for(int i=2;i<=n;++i) { if(!vis[i]) prime[++tot]=i; for(int j=1;j<=tot&&prime[j]*i<=n;++j) { vis[i*prime[j]]=1; if(i%prime[j]==0) break;//每个数都只会被它最小

noip复习之数学(2)——递推关系

1.问题一:兔子的繁殖(斐波拉契数列) ? f[n]=f[n-1]+f[n-2] \[ Fibonacci:f(n)=\frac{1}{\sqrt{5}}\left(\frac{1+\sqrt{5}}{2}\right)^n-\frac{1}{\sqrt{5}}\left(\frac{1-\sqrt{5}}{2}\right)^n \] 问题二:凸三角形剖分/括号化问题/不同出栈次序数问题/二叉树个数问题(卡特兰数) f[n]=f[2]f[n-1]+f[3]f[n-2]+...+f[n-1]f[

splay专题复习——bzoj 3224 &amp;amp; 1862 &amp;amp; 1503 题解

[前言]快要省选二试了.上次去被虐出翔了~~这次即便是打酱油.也要打出风採!于是暂停新东西的学习.然后開始复习曾经的知识,为骗分做准备.PS:区间翻转的临时跳过,就算学了也来不及巩固了. [BZOJ3224] 3224: Tyvj 1728 普通平衡树 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 1477  Solved: 570 Description 您须要写一种数据结构(可參考题目标题).来维护一些数,当中须要提供下面操作: 1. 插入

noip2017考前基础复习——数论数学

·最大公约数 gcd 辗转相除法  gcd(a,b)=gcd(b,a%b) 1 int gcd(int x,int y){ 2 if(y==0) return x; 3 return gcd(y,x%y); 4 } 效率O(logn) ·最小公倍数 lcm 可由最大公约数推来 lcm(a,b)=a*b/gcd(a,b) 1 int lcm(int x,int y){ 2 int p=gcd(x,y); 3 return a*b/p; 4 } 效率O(logn) ·扩展欧几里得 extgcd 求a

NOIP模拟:切蛋糕(数学欧拉函数)

题目描述  BG 有一块细长的蛋糕,长度为 n. 有一些人要来 BG 家里吃蛋糕, BG 把蛋糕切成了若干块(整数长度),然后分给这些人. 为了公平,每个人得到的蛋糕长度和必须相等,且必须是连续的一段. 但是, BG 并不知道要有多少人来. 他只知道, 来的人数为n的约数,且小于n. 显然把蛋糕平均分成 n 块一定能满足要求.但是, BG 想要分出的块数尽量少.现在 BG 想知道,他要把蛋糕分成至少多少块,才能使得不管多少人来都能满足要求. 输入格式 输入文件名为 cake.in. 输入共一个整

[NOIP 2014复习]第五章:图论

一.最短路问题 1.图的存储方式 2.Floyd算法求多源最短路 3.Dijsktra算法求单源最短路 4.Bellman-Ford算法求单源最短路 5.SPFA求单源最短路 (1)Wikioi 1173 最优贸易 题目描述 Description [问题描述] C 国有n 个大城市和m 条道路,每条道路连接这n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这m 条道路中有一部分为单向通行的道路,一部分 为双向通行的道路,双向通行的道路在统计条数时也计为1 条. C 国幅员