比赛 |
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;
}