Hoj 2084 The Colored Cubes (polya计数)

第一道 polya计数 的题,最基础的入门题。

题目链接:http://acm.hit.edu.cn/hoj/problem/view?id=2084

题意:用n种颜色为正六面体染色,求有多少种不同的情况。

思路:

(1)找到图形中的中心对称轴。本题有三种:面与面中心,棱与棱中心,对称顶点。

(2)写出不动置换。旋转角度为0即为不动置换,不动置换只能计算一次,所以以下对称轴的置换均不考虑0度的情况。

本题不动置换1个,循环节为6

(3)写出沿着不同中心对称轴旋转的置换。

面与面中心置换

旋转90度:3种,每种循环节为3个 (1,1,4)

旋转180度:3种,每种循环节为4 个(1,1,2,2)

旋转270度:同90度

棱与棱中心置换:6种(12条棱共6对……),每种循环节为3个 (每个棱由2个面共用,所以可以旋转1次达到同构)

顶点与顶点置换:4*2种(8个顶点共4对,每对分为旋转120度和240度),每种2个循环节(3,3),(每个点由3个面共用,所以可以旋转2次达到同构)

(4)由公式推得结果为 (n^6+3n^4+12n^3+8n^2)/24

最后,注意数据范围

#include 

long long Cal (long long a,int index) //幂
{
    long long ans=1;
    while (index--)
        ans*=a;
    return ans;
}

int main ()
{
    long long n,ans;
    while (scanf("%lld",&n),n)
    {
        ans=Cal(n,6)+3*Cal(n,4)+12*Cal(n,3)+8*Cal(n,2);
        ans/=24;
        printf("%lld\n",ans);
    }
    return 0;
}


你可能感兴趣的:(Hoj 2084 The Colored Cubes (polya计数))