记录编号 600991 评测结果 AAAAAAAAAA
题目名称 3132.玩具 最终得分 100
用户昵称 Gravatarwdsjl 是否通过 通过
代码语言 C++ 运行时间 0.714 s
提交时间 2025-05-23 10:06:37 内存使用 4.42 MiB
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;

ll mod, n;
ll inv[304], f[304][304], h[304][304], dp[304][304];

int main() {
	freopen("toyy.in","r",stdin);
	freopen("toyy.out","w",stdout); 
    scanf("%lld %lld", &n, &mod);
    inv[0] = inv[1] = 1;
    dp[1][1] = 1;
    
    for (int i = 2; i <= n; i++) {
        inv[i] = (mod - mod/i) * inv[mod%i] % mod;
        (inv[i] += mod) %= mod;
    }
    
    for (int i = 2; i <= n; i++) {
        for (int j = 1; j <= i; j++) {
            dp[i][j] = dp[i-1][j-1] * (j-1) % mod * inv[i] % mod + 
                       dp[i-1][j] * (i-j) % mod * inv[i] % mod;
            dp[i][j] %= mod;
        }
    }
    
    for (int i = 0; i <= n; i++)
        h[0][i] = 1;
    
    for (int i = 1; i <= n; i++) {
        for (int j = 0; j <= n; j++) {
            if (j) f[i][j] = h[i-1][j-1];
            else f[i][j] = (i < 2);
            
            for (int k = 1; k <= i; k++) {
                h[i][j] = (h[i][j] + f[k][j] * h[i-k][j] % mod * dp[i][k] % mod) % mod;
            }
        }
    }
    
    ll ans = 0;
    for (int i = 1; i < n; i++) {
        ans += (f[n][i] % mod - f[n][i-1] % mod) * i % mod;
        ans %= mod;
    }
    
    return !printf("%lld", (ans + mod) % mod);
}