HDU 1812 Count the Tetris(Polya计数+JAVA)
题目还是挺裸的Polya的,但是有一个置换推错了。。。。悲剧啊,一直WA,Java也不熟悉,看着czyuan的文章快速入门。。。
180度的时候想错了,其实是c^(n*n+1)/2种,想成和从中间翻一样呢。哎,java写的太搓了。。。开始的时候都没看见翻转。。。
1 import java.io.*; 2 import java.math.*; 3 import java.text.*; 4 import java.util.*; 5 public class Main 6 { 7 public static void main(String[] args) 8 { 9 Scanner cin = new Scanner (System.in); 10 while(cin.hasNext()) 11 { 12 BigInteger[] p; 13 p = new BigInteger[1001]; 14 BigInteger sum,si; 15 int i,n,c; 16 si = BigInteger.valueOf(8); 17 sum = BigInteger.valueOf(0); 18 n = cin.nextInt(); 19 c = cin.nextInt(); 20 p[1] = BigInteger.valueOf(c); 21 for(i = 2;i <= n*n;i ++) 22 { 23 p[i] = p[i-1].multiply(p[1]);//预处理 24 } 25 sum = sum.add(p[n*n]);//旋转0度 26 if(n*n % 4 == 0) 27 { 28 sum = sum.add(p[(n*n)/4]);//旋转90 29 sum = sum.add(p[(n*n)/4]);//旋转270 30 } 31 else 32 { 33 sum = sum.add(p[(n*n)/4+1]); 34 sum = sum.add(p[(n*n)/4+1]); 35 } 36 sum = sum.add(p[((n+1)/2)*n]);//沿着中间横着翻转 37 sum = sum.add(p[((n+1)/2)*n]);//沿着中间竖着翻转 38 sum = sum.add(p[(n*n+1)/2]);//旋转180度 39 sum = sum.add(p[(n+1)*n/2]);//沿着左对角线 40 sum = sum.add(p[(n+1)*n/2]);//沿着右对角线 41 sum = sum.divide(si);//除8 42 System.out.println(sum); 43 } 44 } 45 }