• hdu1812 Polya定理


    一直知道有这么个定理,但一直没理解,今天看了看书,差不多知道怎么用了,但证明还是完全不用会。。。

    用polya定理解题其实就是确定置换及其循环节。这题显然就是8个置换,四个旋转(其中一个为不动。。)和四个翻转,其循环节数分别为①n*n②(n*n+3)/4③(n*n+1)/2④同2⑤n+(n*n-n)/2⑥同5⑦奇数时n+(n*n-n)/2偶数时n*n/2⑧同7

    import java.io.*;
    import java.math.BigInteger;
    import java.util.*;
    public class Main {
        public static Scanner getFileScanner(boolean isOnlineJudge) {
            if(isOnlineJudge) {
                return new Scanner(System.in);
            }
            File myFile = new File("data.in");
            FileInputStream myFileStream = null;
            try {
                myFileStream = new FileInputStream(myFile);
            } catch (FileNotFoundException e) {
            }
            Scanner cin = new Scanner(myFileStream);
            return cin;
        }
        public static void main(String[] args) {
            Scanner cin = getFileScanner(true);
            int N, C;
            int[] ar = new int[8];
            while(cin.hasNextInt()) {
                N = cin.nextInt();
                C = cin.nextInt();
                ar[0] = N * N;
                ar[1] = (N * N + 3) / 4;
                ar[2] = (N * N + 1) / 2;
                ar[3] = ar[1];
                ar[4] = N + (N * N - N) / 2;
                ar[5] = ar[4];
                if(N % 2 == 1) {
                    ar[6] = N + (N * N - N) / 2;
                }else {
                    ar[6] = N * N / 2;
                }
                ar[7] = ar[6];
                BigInteger ans = BigInteger.ZERO;
                BigInteger BC = BigInteger.valueOf(C);
                for(int i = 0; i < 8; i++) {
                    ans = ans.add(BC.pow(ar[i]));
                }
                ans = ans.divide(BigInteger.valueOf(8));
                System.out.println(ans);
            }
        }
    }
  • 相关阅读:
    GIT相关学习网站
    【转】一些软件设计的原则
    c语言(14)
    c语言(13)
    c语言(12)
    c语言(11)
    c语言(十)
    c语言(九)
    c语言(八)
    c语言(七)
  • 原文地址:https://www.cnblogs.com/moonbay/p/2673763.html
Copyright © 2020-2023  润新知