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)

posted @ 2022-07-18 20:02  Displace  阅读(26)  评论(0)    收藏  举报