[AGC057E] RowCol/ColRow Sort(转化条件+dp)
问题的操作是对序列排序,关注的是数之间的大小关系,这时候我们可以考虑将题目的范围缩小,思考值域在
手玩后发现,在这样的条件下,第一种操作即按照每行
思考如何刻画
那么刻画就是行列的可重集合与
回到原问题,只需要将前面的方法拓展,枚举
注意到操作的特殊性,枚举每个
继续改写条件。设
至此我们将原问题变为:给定两个单调不升的序列
怎么考虑
每一次
时间复杂度
#include <bits/stdc++.h>
#define pii std::pair<int, int>
#define fi first
#define se second
#define pb push_back
#define mk std::make_pair
using u32 = unsigned int;
using u64 = unsigned long long;
using i64 = long long;
const i64 iinf = 0x3f3f3f3f, linf = 0x3f3f3f3f3f3f3f;
const int N = 1.5e3 + 10, mod = 998244353;
int n, m;
int B[N][N];
i64 inv[N], fac[N], r[15][N], c[15][N], cnt[N];
i64 f[N][N], ans = 1;
i64 qpow(i64 a, i64 b) {
i64 ret = 1;
while(b) {
if(b & 1) ret = ret * a % mod;
a = a * a % mod;
b >>= 1;
}
return ret;
}
int main () {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n >> m;
for(int i = 1; i <= n; i++) {
for(int j = 1; j <= m; j++) {
std::cin >> B[i][j];
r[B[i][j]][i]++;
c[B[i][j]][j]++;
}
}
int M = std::max(n, m);
fac[0] = 1;
for(i64 i = 1; i <= M; i++) fac[i] = fac[i - 1] * i % mod;
inv[M] = qpow(fac[M], mod - 2);
for(i64 i = M - 1; i >= 0; i--) inv[i] = inv[i + 1] * (i + 1) % mod;
for(int k = 0; k < 9; k++) {
for(int j = 1; j <= n; j++) r[k + 1][j] += r[k][j];
for(int j = 1; j <= m; j++) c[k + 1][j] += c[k][j];
int t = n;
for(; t && !r[k][t]; t--);
memset(f, 0, sizeof(f));
f[0][0] = 1;
for(i64 i = 1; i <= m; i++) {
i64 s = f[i - 1][0];
for(i64 j = 1; j <= m; j++) {
f[i][j] = ((j - i + 1) * f[i - 1][j] + s) % mod;
s = (s + f[i - 1][j]) % mod;
}
for(; t && r[k][t] == i; t--) {
for(int j = 1; j <= m; j++) f[i][j] = f[i][j] * std::max(0LL, c[k + 1][j] - t + 1) % mod;
}
}
ans = ans * f[m][m] % mod;
memset(cnt, 0, sizeof(cnt));
for(int i = 1; i <= n; i++) cnt[r[k][i]]++;
for(int i = 1; i <= m; i++) ans = ans * inv[cnt[i]] % mod;
memset(cnt, 0, sizeof(cnt));
for(int i = 1; i <= m; i++) cnt[c[k][i]]++;
for(int i = 0; i <= n; i++) ans = ans * inv[cnt[i]] % mod;
}
std::cout << ans << "\n";
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具