首页 > 其他分享 >AT_agc057_e 题解

AT_agc057_e 题解

时间:2023-11-11 11:38:47浏览次数:43  
标签:le limits 题解 sum agc057 forall 排序 sim

[0] 约定

\(r_i = \sum\limits_{j = 1}^{m}[A_{i,j}\le k]\)
\(r^{'}_i = \sum\limits_{j = 1}^{m}[B_{i,j}\le k]\)
\(c_j = \sum\limits_{i = 1}^{n}[A_{i,j}\le k]\)
\(c^{'}_j = \sum\limits_{i = 1}^{n}[B_{i,j}\le k]\)

[1] 分析思路

[1.1] 分析操作

对于 \(A\),若 \(\forall k,\{r_i|i\in[1,n]\} = \{r^{'}_i | i\in[1,n]\}\),则先行再列的排序后 \(A=B\)。
同理,若 \(\forall k,\{c_j|j\in[1,m]\} = \{c^{'}_j | j\in[1,m]\}\),则先列再行的排序后 \(A=B\)。

由此,对于每个 \(k\),确定 \(10\) 对排列 \(p_{1\sim n},q_{1\sim m}\),满足对于第 \(i^{th}\) 对排列,排序后 \(k = i^{th},r_i = r^{'}_{p_i},c_i = c^{'}_{q_i}\)。

[1.2] 转化限制

对于每对排列单独考虑,需要满足 \([A_{i,j}\le k] = [B_{p_i,q_j}\le k]\)。

对于 \(i^{th}\) 相邻的两对排列,需要满足 \(B_{p_i,q_j}\le k \rightarrow B_{p\circ p^{'}_i,q\circ q^{'}_j}\le k + 1\)。

更进一步,\([B_{i,j}\le k] = [j\le r'_i] = [i\le c'_j]\)。

于是有 \(P:\forall i, j,j\le r'_i, p_i\le c'_{q_j}\)。

排序,使 \(c',r'\) 单调不增(以下写作 \(c,r\))。

\(P:\forall i, p_i\le c_{\max\limits_{j = 1}^{r_i}q_j}\)

发现只要符合 \(P\) 的排列就可以组合在一起。

[2] 如何计数

[2.1] DP 方程

发现需要计数的是满足以下条件的排列:

\(x_i = \max\limits_{j = 1}^{a_i}q_j\le m\)
\(p_i\le c_{x_{i}}\le n\)

考虑 DP 计数。

考虑与 树上异或 相似的分阶段计数。

令 \(f_{i,j}\) 代表 \(p_{1\sim i}\) 已确定,\(q_{a_{i} + 1\sim m}\) 已确定,且 \(x_i = j\) 的方案数。

发现可以在 \(f_{i - 1, j} \to f_{i,j}\) 的过程中计算 \(p_i\) 的贡献 \(j - (i - 1)\)。

可以在 \(i - 1\to i\) 的过程中计算 \(q_{a_{i} + 1\sim a_{i - 1}}\) 的贡献,用组合数算即可。

[2.2] 细节

就是无解或得到负数的情况。

[3] 后记

[3.0] 注意

以下全为作者自己口胡的,不要看,不要看!很可能是错的

[3.1] 正文

好的,让我们从头开始。

考虑排序对 \(A\) 造成的影响,发现比较难想。

发现 \(B\) 必然已经有序。

减少限制,若 \(A_{i,j}\in[0,1]\)。

[3.1.2] 约定

\(r_i\) 代表第 \(i\) 行 \(1\) 的个数。
\(c_j\) 代表第 \(j\) 列 \(1\) 的个数。

结论:

若可重集 \(r_A=r_B,c_A=c_B\) 那么排序后 \(A,B\) 相同。

证明:

考虑排序对 \(A\) 造成的影响。
先行再列,相当于对 \(r_i\) 排序。
先列再行,相当于对 \(c_j\) 排序。

回到原题,\(A_{i,j}\in[0,9]\)。

[3.1.3] 约定

\(r_{k,i}\) 代表第 \(i\) 行 \([A_{i,j}\le k] = 1\) 的个数。
\(c_{k,j}\) 代表第 \(i\) 行 \([A_{i,j}\le k] = 1\) 的个数。

再次考虑排序的意义,发现因为对于每个 \(k\),将 \(A\) 中元素视为 \([A_{i,j}\le k]\in[0,1]\),发现对于每个 \(k\) 排序得到的最终 \(A_{k}'\) 与 \(A_{i,j}\in[0,1]\) 的情况等价。

考虑通过 \(k\) 个 \(A_{k}'\) 还原 \(A'\),若 \(A_{k,i,j}'\) 为 \(1\) 说明 \(A'_{i,j}\le k\),同理 \(0\) 代表 \(A'_{i,j}>k\)。

直接计数应该也可以,但明显时间复杂度有问题。

发现 \(k\) 与 \(k + 1\) 的关系并没有那么紧密,因为只需要保证

\[\forall i\in[1,n],j\in[1,m],k\in[1,9],r_{k,i}\ge r_{k-1,i},c_{k,j}\ge c_{k-1,j} \]

即可。

[4] 参考资料

E - RowCol/ColRow Sort Editorial by evima

标签:le,limits,题解,sum,agc057,forall,排序,sim
From: https://www.cnblogs.com/SkyMaths/p/17825647.html

相关文章

  • [题解] AT_dp_w Intervals
    Intervals有\(m\)条形如\((l,r,a)\)的限制,表示如果\(s_{[l,r]}\)中有1就会有\(a\)的价值。你要求长度为\(n\)的01串的价值的最大值。\(n,m\le2\times10^5\)。将每个限制挂到右端点上,在右端点处计算贡献。然后我们就只关心最后一个1出现的位置了。......
  • 转 问题解决:记录一次Linux服务器根目录突然爆满
    一般跟目录满了,可以重点关注/var这个目录 一、出问题了过了个双休来到公司,同时发现Linux终端的服务器状态中根目录空间直接爆满100%,周五走之前根目录仅仅使用了59%,同时项目服务的后台不停的有日志打印,而且测试的小伙伴说系统登录不上去了。下面记录一下个人排查并解决这个问题......
  • CF1485F Copy or Prefix Sum 题解
    思路考虑\(a_i\)要么是\(b_i\)要么是\(b_i-s\)。考虑\(s\)代表着什么。它是\(a\)的前缀和。那么必然是往前一段\(b\)的和。因为每个\(b\)代表着要么是这一位的\(a\)或者前面所有的\(a\)。考虑设\(f_i\)为这个位置填\(b_i\)的方案数。\(g_i\)为这个......
  • [POI2011] SMI-Garbage 题解
    题目链接显然,对于初始颜色与目标颜色不同的边,我们需要走过奇数次;对于初始颜色与目标颜色相同的边,我们需要走过偶数次。对于只有偶数边的情况,这种情况下不走就行;对于只有奇数边;可以理解为每条边只能经过一次,就是欧拉路径问题,并且考虑这题的特殊性质,如果一个图是由若干个简单环构......
  • CSP-S2019 江西 题解
    为什么有\(5\)道题?[CSP-S2019江西]和积和简单化一下式子:\[(n+1)\times\sumA_i\timesB_i-(\sumA_i)\times(\sumB_i)\]其中\(A,B\)都是前缀和。[CSP-S2019江西]网格图naive的kruskal是很naive的,所以需要一点简单的优化。考虑其本质过程就是按照......
  • CF1485E Move and Swap 题解
    不要什么脑子的带\(log\)做法。思路考虑\(dp_{i,j}\)表示红点到\(i\),蓝点到\(j\)的最大权值。那么有:\[dp_{i,j}=\max(dp_{fa_i,pre},dp_{fa_j,pre})+|a_i-a_j|\]其中\(pre\)是任意一个上一层节点。发现第二维没有用。可以优化:\[dp_i=\max(dp_{fa_i}+\max(|a_i-a_......
  • APISIX源码安装问题解决
    官网手册的安装语句:curlhttps://raw.githubusercontent.com/apache/apisix/master/utils/install-dependencies.sh-sL|bash-执行install-dependencies.sh报如下错误:Transactioncheckerror:file/usr/share/gcc-4.8.2/python/libstdcxx/v6/printers.pyfrominstal......
  • 苏格拉底问答、实践过程截图、遇到问题解决问题截图,代码链接
    #include<stdio.h>#include<stdlib.h>#include<string.h>#include<unistd.h>#include<signal.h>#include<setjmp.h> //foralongjumpjmp_bufenv;//forsavinglonjmpenviromentintcount=0;voidhandler(intsig,......
  • CSP-2019-S 题解
    做了这套题,如果是让现在的我当时去考的话应该一共可以有450分,格雷码,括号树,树的重心都可以做,树上的数可以有10分,Emiya至少可以有76分,划分也可以有64分。看OIerDB上可以有166名的好成绩。我的代码合集:洛谷/云剪贴板[CSP-S2019]格雷码首先是格雷码有一个很好的生......
  • CF1428F Fruit Sequences 题解
    使用了一种和大多数题解不同的做法。虽然是带\(log\)的。思路首先考虑如何求一个固定左端点的答案。我们发现,每个答案会随着右端点的递增单调不降。而每个答案在增加时会形成若干个区间。例如:11101010111111我们答案增加的区间即为:11100000000111可以发现,这个区间就......