2022.07.18 zrNOI模拟赛总结
1.时间安排
8:00~8:30 看题面
T1:又是T组数据的数学题,求满足要求的矩阵的个数,只会爆搜打表,m=1可能有规律。
T2:概率期望DP题,不会写暴力。
T3:构造题,在数轴上选一些点是的给定区间至少含一个点,最小化区间点数的最大值,会20分暴力状压,剩下的没什么想法。
8:30~9:20
写了T1的爆搜,跑了大概20分钟跑出来了10*10的表。
上了神秘网站一查,m=1真有规律,但是这有点不讲武德,就不写了。
9:20~10:00
因为T组询问以为又是100组这样的,而状压是 \(2^20\) 复杂度肯定寄,后来更新题面T=5,写完状压T3就摆了。
10:00~13:00
感觉T2T3都不可做,莽T1。
首先发现问题可以转化成有一个k * k的矩阵有n次操作,每次可以刷一行或一列使得每个格子加一,使得最终每个格子都大于等于m的不同矩阵数。
大于等于m可以提前刷m次,所以操作n-m次即可,因为经典结论 \(\sum_{i=0}^{n}C_{i}^{m}=C_{n+1}^{m+1}\) 枚举操作次数可以用O(1)代替,不需要考虑。
总方案数显然可以经典插板 \(C_{n+2*k-1}^{2*k-1}\),但重复的很棘手,比如 {1,2,1}{0,0,0} 与 {0,1,0}{1,1,1} 刷出来的矩阵是相同的。
考虑容斥,一开始想的是如果最小值是mn的话可以整体平移mn次,然后枚举最小值是mn的方案数容斥,但是寄了,感觉这样子计数很奇怪,没有深究。
后来想到可以把这些同构的操作强行去掉可以整体平移的部分,这个可以枚举,复杂度是调和计数 \(\sum_{i=1}^{n}\frac{1}{i}=logn\) ,需要计算的是两边的刷的方案都至少含有一个0的方案。
一开始直接做,寄惨了,后来一想这直接容斥就行。
用所有的方案减去2倍的一边随意、一边不含0的方案加上两百都不含0的方案即可。
调了很久,在12:40左右才调出来,复杂度 \(O(Tnlogn)\),测了组大数据跑不动,只能过60,认命了。
result:
T1:60 T2:/ T3:20
2.总结
T1:
其实离正解很近了。
利用上文的“刷子”的思想,考虑对于一个矩阵生成两个数列 \(x,y\),每个数必然可以表示为 \(a_{i,j}=x_i+y_j\) 的形式,但是这样的数列并不是唯一的。
求数列数量是好求的,所以需要在数列与矩阵间建立一一对应关系。
不妨让 \(x\) 中一个数是0,比如是 \(x_i\) ,那么对于 \(a_i\) 这一行,必然有 \(y_j=a_{i,j}\),\(y\) 就被唯一确定了,那 \(x\) 也就被唯一确定了,这样一一对应关系就建立起来了。
所以只需要让 \(x\) 中至少含一个0即可。
因为 \(a_{i,j}\geq m\) ,所以 \(y\) 一定是大于等于 \(m\) 的,都减去 \(m\) 后就和 \(x\) 数列的限制一样了。
至少含一个0用 \(x\geq 0\) 减去 \(x\geq 1\) 即可。
T2:
只看懂了建最短路树的部分,完全不懂之后的DP在干什么。
(待upd)
T3:
看不懂正解,口胡J神的场70分差分约束做法。
答案显然具有单调性,不妨二分答案。
提前把所有点离散化,方便之后的处理。
记 \(s_i\) 表示离散化后前 \(i\) 个点选择了多少个。
按下列约束关系建图
1 . \(s_i-s_{i-1}>=0,s_{i-1}-s_i>=-1\)
2 . 对于所有区间 \(s_r-s_{l-1}>=1, s_{l-1}-s_r>=-mid\)
3 . \(s_0-s_{len}>=-n\)(len为离散后点的数量)
最后建个超级源点跑最长路即可,复杂度 \(O(n^2logn)\)
(待upd)

浙公网安备 33010602011771号