列表

详情


NC21815. 筱玛的排列

描述

筱玛是一个快乐的男孩子。
筱玛在一次数学考试中看到了这样一道题:
求有多少个长度为 n 的不同的排列 A,满足对于任意的 i 均有 A[A[i]] + i = n + 1。
聪明的筱玛当然一眼就秒掉了这道题,现在他想来考考你。

输入描述

一行一个整数 n。

输出描述

一行一个整数,表示模 998244353 意义下的答案。

示例1

输入:

4

输出:

2

说明:

3 1 4 2
2 4 1 3

只有以上这两个合法的排列 A。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++14(g++5.4) 解法, 执行用时: 14ms, 内存消耗: 8412K, 提交时间: 2019-01-11 22:12:30

#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
long long a[1000005];
int main(){
	int n;
	memset(a,0,sizeof(a));
	a[1]=1;
	for(int i=4;i<=1000000;i+=4){
		a[i]=(a[i-3]*(i-2))%mod;
		a[i+1]=a[i];
	}
	scanf("%d",&n);
	printf("%lld\n",a[n]);
}

C++11(clang++ 3.9) 解法, 执行用时: 11ms, 内存消耗: 8192K, 提交时间: 2020-05-09 16:49:46

#include<iostream>
using namespace std;
#define L long long
L a[1000010],n;
int main(){
    cin>>n;
    a[0]=a[1]=1;
    for(L i=4;i<=n;i++) a[i]=a[i-4]*(i-2)%998244353;
    cout<<a[n];
}

上一题