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=)。
标签:deque,pkusc2021,矩阵,next,垫底,T1,Day,单调 来源: https://www.cnblogs.com/2ha-maomao-2006/p/pkusc2021.html