#include <bits/stdc++.h>
using namespace std;
typedef long long int LL;
const int MAXN = 10000005;
LL R[MAXN], S_old[MAXN], SS_old[MAXN];
int main() {
int n, m, p;
cin >> n >> m >> p;
for (int i = 1; i <= m; i++) R[i] = i;
for (int i = 2; i <= n; i++) {
S_old[0] = 0;
SS_old[0] = 0;
for (int x = 1; x <= m; x++) {
S_old[x] = (S_old[x-1] + R[x]) % p;
SS_old[x] = (SS_old[x-1] + S_old[x]) % p;
R[x] = 0;
}
for (int x = 1; x <= m; x++) {
R[x] = (R[x] + S_old[m] * x) % p;
R[x] = (R[x] + (p - S_old[m-x]) * x) % p;
R[x] = (R[x] + (p - SS_old[x-1])) % p;
}
//for (int x = 1; x <= m; x++)
// cerr << R[x] << " ";
//cerr << "\n";
}
LL result = 0;
for (int x = 1; x <= m; x++)
result = (result + R[x]) % p;
cout << result << "\n";
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | #include <bits/stdc++.h> using namespace std; typedef long long int LL; const int MAXN = 10000005; LL R[MAXN], S_old[MAXN], SS_old[MAXN]; int main() { int n, m, p; cin >> n >> m >> p; for (int i = 1; i <= m; i++) R[i] = i; for (int i = 2; i <= n; i++) { S_old[0] = 0; SS_old[0] = 0; for (int x = 1; x <= m; x++) { S_old[x] = (S_old[x-1] + R[x]) % p; SS_old[x] = (SS_old[x-1] + S_old[x]) % p; R[x] = 0; } for (int x = 1; x <= m; x++) { R[x] = (R[x] + S_old[m] * x) % p; R[x] = (R[x] + (p - S_old[m-x]) * x) % p; R[x] = (R[x] + (p - SS_old[x-1])) % p; } //for (int x = 1; x <= m; x++) // cerr << R[x] << " "; //cerr << "\n"; } LL result = 0; for (int x = 1; x <= m; x++) result = (result + R[x]) % p; cout << result << "\n"; return 0; } |
English