筱玛的排列
原创
©著作权归作者所有:来自51CTO博客作者不想悲伤到天明的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
筱玛是一个快乐的男孩子。
筱玛在一次数学考试中看到了这样一道题:
求有多少个长度为 n 的不同的排列 A,满足对于任意的 i 均有 A[A[i]] + i = n + 1。
聪明的筱玛当然一眼就秒掉了这道题,现在他想来考考你。
输入描述:
输出描述:
一行一个整数,表示模 998244353 意义下的答案。
示例1
输入
复制
输出
复制
说明
3 1 4 2
2 4 1 3
只有以上这两个合法的排列 A。
备注:
1 ≤ n ≤ 106
打表 找规律 ;
f[0] = 1 ; f[5] = 2 ; f[10] = 0 ;
f[1] = 1 ; f[6] = 0 ; f[11] = 0 ;
f[2] = 0 ; f[7] = 0 ; f[12]= 120
f[3] = 0 ; f[8 ] = 12 ; f[13] = 120
f[4] = 2 ; f[9] = 12 ;
f[i] = f[i-4]*(i-2 );
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std ;
const int MAX = 1e6+10;
const int mod=998244353;
typedef long long LL ;
LL f[MAX] ;
int main()
{
f[0]=f[1]=1;
for(int i=4;i<=1e6+10;i++)
f[i]=f[i-4]*(i-2)%mod;
int n;
cin >> n ;
cout<<f[n]<<endl;
return 0 ;
}