【HDU】1812 Count the Tetris

题意: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)));

        }

    }

}

你可能感兴趣的:(count)