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 }

你可能感兴趣的:(count)