FZU ACM 联合训练 Day1总结

题解

E

题意:
给你一棵有根树 ,记每个点的权值为 \(w[i]\) 。对于每个 \(i\)\(\sum_{j=1}^{i-1} w[LCA(i,j)]\)

题解:
Marser&Twii几分钟口头AC——DSU on Tree,用树状数组分两轮统计轻子树对重子树的贡献,log方稳过。

感受:
M&T调了三个小时没AC,当场暴毙。(现在都不知道挂在哪里)

G

题意:
给一个矩阵B,让你生成一个矩阵序列 \(M\),其中 \(M_i=(\prod_{j=c_i}^{i-1} M_j) * B\)。( \(c,M_0\) 给定, \(c_i<i,c_{i-1} \leq c_i\)

题解:
明眼人都看的出来,这其实是让你维护一个滑窗。
push容易啊,我们维护一下从滑窗左端点划过来的乘积 \(stB\) ,乘上去就是了。
可是,左端pop怎么破?
考虑维护一个栈,把从滑窗右端点一直左乘到左端点,每次乘完都把结果丢到栈里面。这样,我们pop的时候就只要弹栈就可以了,而push时更新栈就成了一个难题。
我们想想怎么撮合这两个做法。
容易发现,在不pop的时候我们根本是不需要用到这个栈的,所以push的时候我们直接把矩阵乘到 \(stB\) 上去,不更新栈。
pop的时候直接弹栈,当栈空的时候,我们直接暴力重构,处理完pop以后,下一个矩阵就恰好等于 \(stB\) 与栈顶的乘积。
容易证明每个位置最多进栈一次,复杂度O(nm^3)。

感受:
我是常数大师,想题8分钟,卡常64小时。

Others

不会。会了也不想写。

全场感受

不会。不会。不会。会。调试。卡常。爆零。
代码能力几近于零。

posted @ 2019-10-04 21:40  臼邦庶民  阅读(168)  评论(0编辑  收藏  举报