题意:n*n个方块组成的正方形,着k种颜色,旋转翻转视为相同的方案,有多少种方案。

Burnside定理,一共有8个置换,每个置换统计一下不变的着色数即可。

import java.util.*;
import java.math.*;

public class Main {
    static int Count1(int n) {
        int ans;
        if (n % 2 == 0)
            ans = 0;
        else
            ans = 1;
        for (n--; n > 0; n -= 2)
            ans += n;
        return ans;
    }

    static int Count2(int n) {
        int ans;
        if (n % 2 == 0)
            ans = 0;
        else
            ans = 1;
        for (n = 2 * n - 2; n > 0; n -= 4)
            ans += n;
        return ans;
    }

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n;
        BigInteger k, ans;
        while (in.hasNext()) {
            n = in.nextInt();
            k = in.nextBigInteger();
            ans = k.pow(n * n);
            ans = ans.add(k.pow(Count1(n)).multiply(BigInteger.valueOf(2)));
            ans = ans.add(k.pow(Count2(n)));
            if (n % 2 == 0)
                ans = ans.add(k.pow(n * n / 2).multiply(BigInteger.valueOf(2)));
            else
                ans = ans.add(k.pow((n * n - n) / 2 + n).multiply(
                        BigInteger.valueOf(2)));
            ans = ans.add(k.pow((n * n - n) / 2 + n).multiply(
                    BigInteger.valueOf(2)));
            System.out.println(ans.divide(BigInteger.valueOf(8)));
        }
    }
}
posted on 2012-09-12 21:28  DrunBee  阅读(672)  评论(0编辑  收藏  举报