比赛 20250904开学热身赛 评测结果 WWWWWWWWWW
题目名称 苹果树 最终得分 0
用户昵称 wdsjl 运行时间 0.030 s
代码语言 C++ 内存使用 3.69 MiB
提交时间 2025-09-04 21:34:04
显示代码纯文本
#include <iostream>
#include <vector>
using namespace std;

int main() {
	freopen("2018tree.in","r",stdin);
	freopen("2018tree.out","w",stdout); 
    int N, P;
    cin >> N >> P;
    
    if (N <= 1) {
        cout << 0 << endl;
        return 0;
    }
    

    vector<long long> fact(N + 1);
    fact[0] = 1;
    for (int i = 1; i <= N; ++i) {
        fact[i] = fact[i - 1] * i % P;
    }

    vector<long long> f(N + 1);
    f[1] = 0;  
    if (N >= 2) {
        f[2] = 1 % P; 
        for (int i = 3; i <= N; ++i) {

            f[i] = f[i - 1] * 2 % P;
            f[i] = f[i] * (i - 1) % P;
        }
    }
    

    long long ans = 0;
    for (int i = 2; i <= N; ++i) {
        int k = N - i;
        long long term = f[i];
        term = term * (k + 1) % P;  
        term = term * fact[k] % P;  
        ans = (ans + term) % P;
    }
    
    cout << ans << endl;
    return 0;
}