「百度之星」大搬家
题解
置换2次要和原来相同,所以每个置换群的大小是1/2
\(F_i\)表示前i个的方案数
\[F_i=F_{i-1}+F_{i-2}*(i-1)\]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include<map> #include<set> #include<cmath> #include<ctime> #include<queue> #include<cstdio> #include<vector> #include<bitset> #include<cstring> #include<iostream> #include<algorithm> #define inf 1000000000 #define mod 1000000007 #define ll long long #define pa pair<ll,int> using namespace std; ll read() { ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f; } int T,n; ll f[1000005]; int main() { T=read(); f[0]=1;f[1]=1; for(int i=2;i<=1000000;i++) f[i]=(f[i-1]+f[i-2]*(i-1))%mod; for(int cas=1;cas<=T;cas++) { printf("Case #%d:\n",cas); n=read(); cout<<f[n]<<endl; } return 0; } |
Subscribe