#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ST first #define ND second #define PB push_back #define SIZE(a) ((int)a.size()) template<class T, class U> ostream& operator<<(ostream &stream, pair<T, U> &p) { stream << "(" << p.ST << "," << p.ND << ")"; return stream; } template<class T> ostream& operator<<(ostream &stream, vector<T> &v) { stream << "["; for(auto elem : v) { stream << elem << ", "; } stream << "]"; return stream; } int main() { ios_base::sync_with_stdio(0); int n, m, p; cin >> n >> m >> p; vector<vector<ll>> dr(2, vector<ll>(m+1, 0)); dr[0][m] = 1; for(int i=1; i <= n; i++) { ll pref = 0; dr[1][0] = 0; for(ll a=1; a <= m; a++) { pref = (pref+dr[0][a-1])%p; dr[1][a] = (dr[1][a-1] + a*dr[0][m] - pref - a*dr[0][m-a])%p; } dr[0] = dr[1]; } cout << ((dr[1][m])%p+p)%p << "\n"; }
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define ST first #define ND second #define PB push_back #define SIZE(a) ((int)a.size()) template<class T, class U> ostream& operator<<(ostream &stream, pair<T, U> &p) { stream << "(" << p.ST << "," << p.ND << ")"; return stream; } template<class T> ostream& operator<<(ostream &stream, vector<T> &v) { stream << "["; for(auto elem : v) { stream << elem << ", "; } stream << "]"; return stream; } int main() { ios_base::sync_with_stdio(0); int n, m, p; cin >> n >> m >> p; vector<vector<ll>> dr(2, vector<ll>(m+1, 0)); dr[0][m] = 1; for(int i=1; i <= n; i++) { ll pref = 0; dr[1][0] = 0; for(ll a=1; a <= m; a++) { pref = (pref+dr[0][a-1])%p; dr[1][a] = (dr[1][a-1] + a*dr[0][m] - pref - a*dr[0][m-a])%p; } dr[0] = dr[1]; } cout << ((dr[1][m])%p+p)%p << "\n"; } |