博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UESTC 1153 The Queen's New Necklaces (Burnside定理)
阅读量:7097 次
发布时间:2019-06-28

本文共 1142 字,大约阅读时间需要 3 分钟。

题目链接:

题意:一个项链的珠子的颜色有若干种。每种颜色的珠子个数为Ai。求有多少种不同的项链?

思路:Burnside定理的描述是:

 

对于本题,G就是旋转0、1、2……n-1。那么我们需要计算旋转i时的不变元个数。对于旋转0度,是经典的排列组合的问题,即有可重复元素出现的排列问题.然后旋转i格,共有Gcd(n,i)个循环,每个循环中有N=n/gcd(n,i)个元素 (n表示小珠子总个数)。如果对于某种颜色的小珠子,它的个数不是N的整数倍,那么显然这种旋转下不存在不动点。如果存在,那么相当于A[i]/N个新的同颜色的小球拿去重新组成一个环的种类数,同样是上面的经典问题。如下图所示,n=10,i=5,三种小球,个数分别为2,4,4,则下面一种排列是不变元:

import java.io.*;import java.util.*;import java.math.*;import java.text.*;public class Main {    static int Gcd(int a,int b)    {        return b==0?a:Gcd(b,a%b);    }        public static void main(String args[])    {        Scanner cin=new Scanner(System.in);           BigInteger f[]=new BigInteger[1005],ans,temp;        int C;        int i,j,k,tot,sum,n,a[]=new int[105],b[]=new int[105];        f[0]=BigInteger.ONE;        for(i=1;i<=1000;i++) f[i]=f[i-1].multiply(BigInteger.valueOf(i));        C=cin.nextInt();        while(C-->0)        {            n=cin.nextInt();            sum=0;            for(i=1;i<=n;i++)            {                a[i]=cin.nextInt();                sum+=a[i];            }            ans=f[sum];            for(i=1;i<=n;i++) ans=ans.divide(f[a[i]]);            for(i=1;i

  

转载地址:http://cahql.baihongyu.com/

你可能感兴趣的文章
docker 一些简略环境搭建及部分链接
查看>>
android studio获取SHA1
查看>>
怎么才能在windows使用git命令
查看>>
Sigar应用
查看>>
从单体架构到微服务的演变之路
查看>>
Valgrind内存泄露检测工具使用初步
查看>>
PDF 补丁丁 0.5.0.2657 发布
查看>>
vue之axios使用
查看>>
VBA批量删除excel表高级版
查看>>
docker & nodejs & mongodb
查看>>
css 清除浮动
查看>>
Python_Selenium学习笔记(2)-浏览器操作方法
查看>>
excel自定义函数添加和使用方法
查看>>
C# 压缩组件介绍与入门
查看>>
结对学习心得感想及创意照
查看>>
sug
查看>>
windows 环境变量
查看>>
input checked取值
查看>>
快速幂取模(当数很大时,相乘long long也会超出的解决办法)
查看>>
EF+Code First+Database First+Model First,EF开发流程
查看>>