原题解链接:https://ac.nowcoder.com/discuss/151505
显然且时答案为, 答案为。
下面考虑 的情况:
假设 , 取 有 。
这时是奇数,矛盾。
若 , 取 , 同样矛盾。
假设 。
取 ,得 。
取 。
取 , 得 。
由于,观察上述等式发现等号右边的四个数两两不同。
进而将此个数分成形如的两组。可找到这样的四元数组其在排列的相同位置是相同的四个数,但顺序不同。
因此可以通过如下步骤得到全部排列:
1.取最小的整数,使得待定,进而求出。
2.重复上述过程。
显然答案。
所以答案等价于
#include<bits/stdc++.h>
#define Mod 998244353
#define N 2000005
using namespace std;
int n,fac[N];
inline int ksm(int x,int y){
int ans1=1;while (y){
if (y&1) ans1=1ll*ans1*x%Mod;
y>>=1;x=1ll*x*x%Mod;
}return ans1;
}
int main(){
scanf("%d",&n);fac[0]=1;
if (n==1) return puts("1"),0;
if (n&3) return puts("0"),0;
for (int i=1;i<=n;i++) fac[i]=1ll*fac[i-1]*i%Mod;
printf("%lld\n",1ll*fac[n/2]*ksm(fac[n/4],Mod-2)%Mod);
return 0;
}