#include <bits/stdc++.h> using namespace std; int MOD; vector<long long> sum(const vector<int> & V) { vector<long long> res(V.size()+1); for (int i=0; i< (int)V.size();i++) { res[i+1]= (res[i] + V[i]); } return res; } vector<long long> sum2(const vector<int> & V) { vector<long long> res(V.size()+1); for (int i=0; i< (int)V.size();i++) { res[i+1]= (res[i] + 1LL*i*V[i]); } return res; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m >> MOD; vector<int> A(m+1); iota(A.begin(), A.end(), 0); while(--n) { auto sumA=sum(A); auto sum2A=sum2(A); for (int k=0; k<m+1; k++) { long long b = (1LL*sumA.back()*k); b -= 1LL*k*(sumA[m+1-k]+sumA[k]); b += sum2A[k]; A[k]=(b%MOD+MOD)%MOD; } } cout << sum(A).back()%MOD << endl; 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 43 44 45 46 47 | #include <bits/stdc++.h> using namespace std; int MOD; vector<long long> sum(const vector<int> & V) { vector<long long> res(V.size()+1); for (int i=0; i< (int)V.size();i++) { res[i+1]= (res[i] + V[i]); } return res; } vector<long long> sum2(const vector<int> & V) { vector<long long> res(V.size()+1); for (int i=0; i< (int)V.size();i++) { res[i+1]= (res[i] + 1LL*i*V[i]); } return res; } int main() { ios::sync_with_stdio(0); cin.tie(0); int n, m; cin >> n >> m >> MOD; vector<int> A(m+1); iota(A.begin(), A.end(), 0); while(--n) { auto sumA=sum(A); auto sum2A=sum2(A); for (int k=0; k<m+1; k++) { long long b = (1LL*sumA.back()*k); b -= 1LL*k*(sumA[m+1-k]+sumA[k]); b += sum2A[k]; A[k]=(b%MOD+MOD)%MOD; } } cout << sum(A).back()%MOD << endl; return 0; } |