pkusc2021 垫底记

Day 0

下午开始鸽子,去余姚。

晚上做了 pkusc2018 的 T1,感觉特别水,乱组合数学一下就没了。

Day 1

\(100+46+0=146\)。

上午报道领了狗牌,然后试机。

下午比赛。

T1 一看 \(t\le10^9\) 就想到矩阵快速幂,然而没想出这东西怎么矩阵快速幂。然后我把每一行、每一列和拆开计算,推出了转移矩阵,发现是个特殊矩阵(对角线为 \(n+1\),其他位置为 \(1\))。

但朴素矩阵乘法是 \(O(n^3)\) 的,早 T 飞了。手推出这种特殊矩阵(对角线为 \(a\),其他位置为 \(b\))相乘还是特殊矩阵,发现只需要计算出矩阵中两个位置的值即可,复杂度优化为 \(O(n^2)\),总复杂度 \(O(n^2\log t)\)。

有个很显然的优化,在矩阵快速幂时没必要存下整个矩阵,存下 \(a\) 和 \(b\) 即可,用公式计算新的矩阵,这就变成 \(O(n^2+\log t)\)。

然后全 T,一分没有。发现当 \(t=0\) 时,会出现 \(-1\) 次方,而 -1 >> 1 \(= -1\),导致死循环。特判后就 AC 了。1.5h 过去了。

T2 的 subtask1 就是暴力。

对于“抄袭”操作为整个区间的 subtask,等价于移动询问操作的左右端点。发现可以维护原序列中每个数右边第一个更大的数的位置,记为 \(next_i\),会形成 \(next\) 树。

只需要用一个单调队列(其实是单调栈,deque 是为了方便二分),把所有操作离线下来,按左端点从大到小排序,先把对应单调队列中不是 \(next_i\) 的全部出队,然后加入 \(i\),二分出可行位置,然后利用维护的前缀和(也就是 \(next\) 树上一条链的和)求出每个询问的答案。

这题需要开多个单调队列。还莫名其妙被卡了空间(估计是 deque 的锅),然后我把定义 deque 放在函数里,用多少开多少,就拿到 \(46\) 分了。

T3《德州扑克》是大膜你 + 期望,还没写完,考试就结束了。

Day 2

\(32+11+0=43\)。

一题都不会。

T1 写了个子树内子树外 dp + \(k=0\),链的部分分手推一下,结果假了。

T2 乱写了一个 dp。

T3 是在 \([0,m]\) 中随机实数点,再计算期望,不能枚举,一分没写。

Day 3

\(146+43=189\),\(4=\) 滚粗。

上午面试,发现我进了面试,然后发现是按照年级分的。

下午讲题,颁奖,拿了个“优秀”(也就是 4=)。

上一篇:Python教程:Python内置数据结构之双向队列!


下一篇:Python技术分享:内置数据结构之双向队列