题目链接
个人思路
这道题目的关键是找到规律…
以题中样例,当 n = 3
:
其中第一个顺序:1,2,3;它的价值为 3
它的倒序:3,2,1;它的价值为0
第二个顺序:1,3,2;它的价值为2
它的倒序:2,3,1;它的价值为1
第三个顺序:2,1,3;它的价值为2
它的倒序:3,1,2;它的价值为1
依次类推,对于选定的 n
,它的其中一个排列与其倒序的排列之和恒定。这个恒定的值我们可以通过,第一种从小到大的顺序排列计算得到,即:0+1+2+...+(n - 1)
——一个等差数列的和。
参考代码
Java
import java.util.Scanner;
public class Main {
static long mod = 998244353;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long n = sc.nextLong();
long res = n * (n - 1) / 2 % mod;
for(long i = 3; i <= n; ++i) {
res = res * i % mod;
}
System.out.println(res);
}
}
C/C++
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 998244353;
ll n;
int main()
{
cin >> n;
ll res = (n - 1) * n / 2 % mod;
for (ll i = 3; i <= n; ++i)
{
res = res * i % mod;
}
cout << res;
return 0;
}