AGC057E RowCol/ColRow Sort【性质,DP】
给定一个
- 分别对
的每一列中元素从小到大排序,再分别对 的每一行中元素从小到大排序能够得到 。 - 分别对
的每一行中元素从小到大排序,再分别对 的每一列中元素从小到大排序能够得到 。
先考虑只有
改写一下可重集的限制,它等价于:对于每个
考虑现在已经确定了前
画画图,我们可以进一步转化条件,令
但现在想要计数似乎还是不太容易,式子里既有
我们按
再维护一个指针
最后注意一下可重集会多算,除掉即可。总时间复杂度
code
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair <int, int> pi;
constexpr int N = 2e3 + 5, V = 10, mod = 998244353;
bool Mbe;
int ksm(int a, int b) {
int ret = 1;
for (; b; b >>= 1, a = 1LL * a * a % mod) if (b & 1) ret = 1LL * ret * a % mod;
return ret;
}
int n, m, a[N][N], r[V][N], c[V][N];
int fc[N], ifc[N], f[N][N];
bool Med;
int main() {
// fprintf(stderr, "%.3lf MB\n", (&Med - &Mbe) / 1048576.0);
ios :: sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
int M = max(n, m);
fc[0] = 1;
for (int i = 1; i <= M; i++) fc[i] = 1LL * fc[i - 1] * i % mod;
ifc[M] = ksm(fc[M], mod - 2);
for (int i = M; i >= 1; i--) ifc[i - 1] = 1LL * ifc[i] * i % mod;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> a[i][j];
r[a[i][j]][i] += 1;
c[a[i][j]][j] += 1;
}
}
int ans = 1;
for (int k = 0; k + 1 < V; k++) {
for (int i = 1; i <= n; i++) r[k + 1][i] += r[k][i];
for (int j = 1; j <= m; j++) c[k + 1][j] += c[k][j];
memset(f, 0, sizeof(f));
f[0][0] = 1;
int t = n;
for (; t && r[k][t] == 0; t--);
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= m; j++) f[i][j] = (f[i][j - 1] + f[i - 1][j - 1]) % mod;
for (int j = 1; j <= m; j++) f[i][j] = (f[i][j] + 1LL * (j - i + 1) * f[i - 1][j] % mod) % mod;
for (; t && r[k][t] == i; t--) {
for (int j = 1; j <= m; j++) {
f[i][j] = 1LL * f[i][j] * (c[k + 1][j] - t + 1) % mod;
}
}
}
ans = 1LL * ans * f[m][m] % mod;
static int cnt[N];
memset(cnt, 0, sizeof(cnt));
for (int i = 1; i <= n; i++) cnt[r[k][i]] += 1;
for (int j = 1; j <= m; j++) ans = 1LL * ans * ifc[cnt[j]] % mod;
memset(cnt, 0, sizeof(cnt));
for (int j = 1; j <= m; j++) cnt[c[k][j]] += 1;
for (int i = 0; i <= n; i++) ans = 1LL * ans * ifc[cnt[i]] % mod;
}
cout << ans << "\n";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】