D 宝石装箱

 

 

 1 #include<bits/stdc++.h>
 2 #define int long long
 3 using namespace std;
 4 const int N = 8e3 + 10;
 5 const int mod = 998244353;
 6 int a[N] , fac[N] , dp[N];
 7 void init()
 8 {
 9     fac[0] = 1;
10     for(int i = 1 ; i <= N - 10 ; i ++) fac[i] = fac[i - 1] * i % mod;
11 }
12 signed main()
13 {
14     ios::sync_with_stdio(false);
15     init();
16     int n , m = 0;
17     cin >> n;
18     for(int i = 1 ; i <= n ; i ++)
19     {
20         int x;
21         cin >> x;
22         a[x] ++ ;
23     } 
24     dp[0] = 1;
25     for(int i = 1 ; i <= n ; i ++)
26         for(int j = i ; j >= 1 ; j --)
27             dp[j] += dp[j - 1] * a[i] , dp[j] %= mod;
28     int ans = 0;
29     for(int i = 0 ; i <= n ; i ++)
30     {
31         if(i & 1) ans -= dp[i] * fac[n - i] ; 
32         else ans += dp[i] * fac[n - i];
33         ans = (ans + mod) % mod;
34     }
35     cout << ans << '\n';
36     return 0;
37 }

 

posted @ 2020-08-19 10:45  古比  阅读(103)  评论(0编辑  收藏  举报