「考试反思」2020-11-24 扩展

T1

考虑每个值对逆序对数的贡献

从大往小了走,每次剪掉贡献即可

写完拍完大概是 (7:50) 其实不是很快

T2

比较神奇的题目

考试的时候写了纯暴力和不相交还有在一行的情况

考后补上正解

这题目其实考完听 (lin4xu) 说就发现自己确实有点差距了

根本没有往建图那方面想,外加上前天晚上的 (T2),直接拓扑就能 (40)

不过自己冲那题单调性的性质了

考虑对冲突进行建图,因为冲突是必须要考虑的

其实这个 (T) 形板的本质就是选择四向其中一个删掉

如果有一个点被三个十字架覆盖了,那么肯定没有解

那么一共只有两种情况,其一是所有的冲突可以连成一个树,其二是可以整成一个基环树

是树的时候选择一个最小的值剪掉就行了

把图上所有的特殊点和特殊点周围的几个点连上边,会形成一些联通块

这些联通块里面如果特殊点的个数(也就是板的个数)不足于板之间边的个数,那么无解

如果相同的话就是个基环树,反之就是树

树的话找整个块里面最小的 (val) 剪掉就行了

想明白之后,代码并不难写

思路积累:建图

如果产生在矩阵上面产生冲突关系这种可以试试建图再找结论

T3

考试的时候过不了样例的复杂度正确的做法就过了,我只冲了暴力(不过好像过不过并不重要)

最妙的一步转化是二分 (check) 的时候逆向维护

即先把竹子拎上去然后往下掉,满足最后所有的 (H_ile h_i) ,同时过程中不能出负数

直接贪心维护下次的时间即可

这样做是 (O((n+mk)log n log Maxx)) 的,并不能过掉所有数据

考虑如何提升效率,按照多次见过的,比如 贪吃蛇 和 蚯蚓

(c_{i,j}) 为竹子 (i) 在第 (j) 天被砍的次数,所以一个竹子的最后的高度值是

[max(h_i+a_i imes m-(sum c_{i,j} imes p),max_{j=1}^m a_i imes (m-j+1)-p imes sum_{kge j+1} c_i,k ) ]

维护每天的看树情况,用 (m) 个队列维护即可

相当妙的做法

T4

好像大家都用的高斯消元或者手动解方程?

不过还可以有这样一种做法:

观察到这个每个数是多少没有什么用,我们只需要差值

设当前的量是 (a>b>c,m=frac{a+b+c} 3)

那么先让 (a) 拿出来 (a-m) 个,这样做是有 (2^{a-m}) 中情况,记得乘上逆元,也就是说

[ans=frac{1}{2^{a-m} }sum f_{m-k,m,m+k}+a-m ]

这里的 (k) 显然可以枚举,然后根据线性性来推一下概率

这东西是可以发现是可以归纳成 (f_{0,x,2x})

[f_{0,x,2x}=x+frac{1}{2^{x}}sum_{i=0} inom x i f_i ]

具体就是说这个每次有多少步就给另外一个人

发现这个 (n^2) 求有点费劲,那么打表发现这个是 (f(0,x,2x)=2x)

所以每次求一下就行了

确实是道非常好的计数题

原文地址:https://www.cnblogs.com/yspm/p/14069571.html