混沌DM

DM Hunter

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

http://acm.hdu.edu.cn/showproblem.php?pid=4475

题目意思:

  给定边长为n的正三角形,如图分成单位三角形,然后从顶点出发,到最下层的任一点,问有多少种方案。

  其中,防线可以是水平和向下,但不能走回头路。

 

递推:ans[n]=ans[n-1]*n*2

对于ans[n],考虑ans[n-1]到达第n-1层,第n-1层有n个点,对于每种方案,均可平移至n个点中的任意一个(若为本身,则相当于没动),对于下一步,有左右两种方案。

可以整理得ans[n]=n! * 2^n,所以n>=mod时,答案为0。

 

最近在练java,所以代码是java的

 1 import java.util.*;
 2 public class Main {
 3     public static void main(String[] args){
 4         Scanner cin=new Scanner(System.in);
 5         long[] ans=new long[1000100];
 6         int m=1000003,T=cin.nextInt();
 7         ans[1]=2;
 8         for(int i=2;i<m;i++)ans[i]=ans[i-1]*2*i%m;
 9         while(T--!=0){
10             long n=cin.nextLong();
11             if(n<m) System.out.println(ans[(int)n]);
12             else System.out.println("0");
13         }
14         cin.close();
15     }
16 }

 

posted on 2012-12-02 13:59  混沌DM  阅读(171)  评论(0编辑  收藏  举报