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