UVALive 5971

Problem J Permutation Counting
Dexter considers a permutation of first N natural numbers good if it doesn't have x and x+1 appearing consecutively, where (1 ≤ x < N)  For example, for N=3 , all goodpermutations are:
1. {1, 3, 2}
2.{2, 1, 3}
3.{3, 2, 1}
Input
Input starts with an integer T (≤ 10000 , denoting the number of test cases.Each
case starts with a line containing an integer N (1 ≤ N ≤ 106)
.
Output
For each case, print the case number and the number ofgoodpermutations
modulo1000 000 007
.
Sample Input
Output for Sample Input
3
2
3
5
Case 1: 1
Case 2: 3
Case 3: 53
 1 #include <map>
 2 #include <set>
 3 #include <list>
 4 #include <cmath>
 5 #include<cctype>
 6 #include <ctime>
 7 #include <deque>
 8 #include <stack>
 9 #include <queue>
10 #include <cstdio>
11 #include <string>
12 #include <vector>
13 #include<climits>
14 #include <cstdlib>
15 #include <cstring>
16 #include <iostream>
17 #include <algorithm>
18 #define LL long long
19 #define PI 3.1415926535897932626
20 using namespace std;
21 int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);}
22 #define MAXN 1000005
23 #define MOD 1000000007
24 LL ans[MAXN],tmp[MAXN];
25 void init()
26 {
27     ans[1]=1;ans[2]=1;
28     for (int i=3;i<MAXN;i++)
29        {
30            ans[i]=((i-1)*ans[i-1])+(i-2)*ans[i-2];
31            ans[i]%=MOD;
32        }
33 }
34 int main()
35 {
36     init();
37     int T;int kase=1;
38     scanf("%d",&T);
39     while (T--)
40     {
41         int N;
42         scanf("%d",&N);
43         printf("Case %d: %lld\n",kase++,ans[N]);
44     }
45     return 0;
46 }
View Code

 

 
posted @ 2014-07-22 21:40  qscqesze  阅读(342)  评论(0编辑  收藏  举报