#include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int n,m; long long p; scanf("%d%d%lld",&m,&n,&p); long long sumpref[n+2][n+2]; long long wyn[n+2][n+2]; for (int i=1; i<=n; i++) { sumpref[i][0]=0LL; for (int j=1; j<=n; j++) { sumpref[i][j]=sumpref[i][j-1]+1LL; } } for (int i=2; i<=m; i++) { for (int dl=1; dl<=n; dl++) //dl aktualnego { wyn[dl][0]=0LL; for (int j=1; j<=n-dl+1; j++) //start aktualnego { wyn[dl][j]=wyn[dl][j-1]; for (int k=1; k<=n; k++) //dl wczesniejszego { //przedzial j..j+dl-1 sumpref[k] int pocz=j-k+1; int kon=j+dl-1; if (pocz<=0) pocz=1; if (kon+k>n+1) kon=n-k+1; // cout<<k<<" "<<pocz<<" "<<kon<<" "; wyn[dl][j]+=(sumpref[k][kon]-sumpref[k][pocz-1]); wyn[dl][j]%=p; } } } for (int y=1; y<=n; y++) { for (int j=1; j<=n; j++) { sumpref[y][j]=wyn[y][j]; wyn[y][j]=0LL; } } } long long S=0LL; for (int i=1; i<=n; i++) S=(S+sumpref[i][n-i+1])%p; printf("%lld", S%p); 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 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <cstdio> #include <iostream> #include <algorithm> using namespace std; int main() { int n,m; long long p; scanf("%d%d%lld",&m,&n,&p); long long sumpref[n+2][n+2]; long long wyn[n+2][n+2]; for (int i=1; i<=n; i++) { sumpref[i][0]=0LL; for (int j=1; j<=n; j++) { sumpref[i][j]=sumpref[i][j-1]+1LL; } } for (int i=2; i<=m; i++) { for (int dl=1; dl<=n; dl++) //dl aktualnego { wyn[dl][0]=0LL; for (int j=1; j<=n-dl+1; j++) //start aktualnego { wyn[dl][j]=wyn[dl][j-1]; for (int k=1; k<=n; k++) //dl wczesniejszego { //przedzial j..j+dl-1 sumpref[k] int pocz=j-k+1; int kon=j+dl-1; if (pocz<=0) pocz=1; if (kon+k>n+1) kon=n-k+1; // cout<<k<<" "<<pocz<<" "<<kon<<" "; wyn[dl][j]+=(sumpref[k][kon]-sumpref[k][pocz-1]); wyn[dl][j]%=p; } } } for (int y=1; y<=n; y++) { for (int j=1; j<=n; j++) { sumpref[y][j]=wyn[y][j]; wyn[y][j]=0LL; } } } long long S=0LL; for (int i=1; i<=n; i++) S=(S+sumpref[i][n-i+1])%p; printf("%lld", S%p); return 0; } |