| 比赛 |
26暑假集训模拟赛1 |
评测结果 |
AAAAAAAAAT |
| 题目名称 |
圆 |
最终得分 |
90 |
| 用户昵称 |
RpUtl |
运行时间 |
3.931 s |
| 代码语言 |
C++ |
内存使用 |
74.15 MiB |
| 提交时间 |
2026-06-29 12:20:32 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int n, mod, dp[N][N][N], ans, c[N][N];
void add(int x, int y, int X, int Y, int v) {
(c[x][y] += v) %= mod;
(c[x][Y + 1] -= v) %= mod;
(c[X + 1][y] -= v) %= mod;
(c[X + 1][Y + 1] += v) %= mod;
return;
}
int main(){
freopen("great.in", "r", stdin);
freopen("great.out", "w", stdout);
cin >> n >> mod;
dp[0][0][0] = 1;
for (int i = 0; i <= n; i++) {
for (int j = 0; j <= i; j++) {
for (int k = 0; k <= i; k++) {
if (!dp[i][j][k]) continue;
(dp[i + 1][j][k] += dp[i][j][k]) %= mod;
add(j + 1, k + 1, j + 1, j, dp[i][j][k]);
add(j + 1, k, i, k, dp[i][j][k]);
}
}
for (int j = 0 ; j <= n; j++) {
for (int k = 0; k <= n; k++) {
if (j) (c[j][k] += c[j - 1][k]) %= mod;
if (k) (c[j][k] += c[j][k - 1]) %= mod;
if (j && k) (c[j][k] -= c[j - 1][k - 1]) %=mod;
(dp[i + 1][j][k] += c[j][k]) %= mod;
}
}
for (int j = 0 ; j <= n; j++) {
for (int k = 0; k <= n; k++) {
c[j][k] = 0;
}
}
}
for (int j = 0; j <= n; j++) {
for (int k = 0; k <= n; k++) {
(ans += dp[n][j][k]) %= mod;
}
}
ans = (ans % mod + mod) % mod;
cout << ans << '\n';
return 0;
}