AGC035F Two Histograms
题意:有一个
对每一行每一列,选出某个前缀将其
求最终能得到多少本质不同的矩阵。
题面相当于给了我们一个映射 : 行列操作前缀长度
我们只能直接知道行列操作的性质,直接统计矩阵较为困难。
分析映射计数无非两条路子,一是找条件,二是找反射。
一般而言,找反射(尤其是双射)较为困难,故先从必要条件入手。
先来研究如何构造结果相同的两个不同的操作序列,将操作序列集合化简。
设
不难发现,行列内部无影响,若要相同,只能一行一列之间替换,即:
那不妨将所有能伸缩的位置都让行伸出来,一番调整之后可以在结果相同的前提下做到
我们成功地将操作序列集合化简了,即我们找到了映射:操作序列
接下来就是分析映射:好的操作序列
我们猜想这恰是一个双射,证明如下:
假设两组不同的好的操作序列为
首先找出第一个不等的列
考虑位置
则可以推出
同时,由好操作序列,推出
若
若
考虑位置
又因为
通过这个双射,我们把问题转化成了:求好操作序列的个数。
考虑容斥,钦定
最终