哈哈哈,简单polya,公式自己推导。
不过这题需要用到大数,很久没写Java,调了好久。
import java.math.*; import java.util.*; import java.io.*; public class Main{ public static void main(String args[]){ Scanner cin=new Scanner(System.in); int n; BigInteger c; while(cin.hasNextInt()) { BigInteger ans=BigInteger.valueOf(0),tmp; n=cin.nextInt(); c=cin.nextBigInteger(); int k=n%2; //奇数的话,在中间有个不动点 ans=ans.add(c.pow(n*n)); //0度 ans=ans.add(c.pow((n*n-k)/4+k)); //90度 ans=ans.add(c.pow((n*n-k)/2+k)); //180 ans=ans.add(c.pow((n*n-k)/4+k)); //270 // System.out.println(ans); if(n%2==0){ tmp=c.pow(n*n/2); ans=ans.add(tmp.multiply(BigInteger.valueOf(2))); tmp=c.pow(n*(n-1)/2+n); ans=ans.add(tmp.multiply(BigInteger.valueOf(2))); } else{ tmp=c.pow(n*(n-1)/2+n); ans=ans.add(tmp.multiply(BigInteger.valueOf(4))); } ans=ans.divide(BigInteger.valueOf(8)); System.out.println(ans); } } }
hdu 1812 Count the Tetris polya计数,布布扣,bubuko.com
hdu 1812 Count the Tetris polya计数
原文地址:http://blog.csdn.net/t1019256391/article/details/37310665