20210923再建鸥哀

复盘

上来一看,学长出的题,明白了,这次模拟不会很简单,立刻进入拿分状态
先通读一遍,第一印象T1好像可做,T2不太好写,T3完全放弃,T4暴力好写
然后就从T1开始看呗,因为知道主拿部分分,所以最早就没去想正解,看到小于500的数据,n3 可做,而这题通过一定的n3 预处理矩阵所有形态就可以Tn查询,这样20分是可拿的,先写了这个
随后看到k=1这个点,我就开始思考,这个是不是也能写,那么当k=1时求的是什么呢,经过观察,这题其实就是求矩阵上每条左上到右下的斜线上所有元素的和,而当k=1时,就是求对角线上元素之和,那么我就将每个n对应的对角线上元素之和打成数列,观察是否有什么规律,好的这不是个等差数列,那么它的差呢,求出它的差,发现一个很神奇的规律,它的差的差每次增加时是+2和+6轮换的,这样就可以递推求解k=1
但是k=1在109 下是不满足条件的,所以我试图通过其它数列找到更好的规律,但是短时间内做不到,所以我把目光投向了后面的题
因为之前的一些认识,所以我决定先看T3暴力能不能拿一些分,但是无果,只能把k=0的特判打了
接下来去看T4,T4对于2000直接n2 暴力很简单就能过20分
这时仅仅过去了1h
接下来去看T2,为什么这里说一下时间节点呢,因为我感觉之前的是真正的暴力,T2暴力是没分的,需要一些基本的数据结构
看看数据点,有两个没操作二,肯定有猫腻,思考一下可以发现,在前面的最大个数肯定大于等于后面的并且必定存在一条链,那么从前面连向后面的边就没用了,所以我们只需要考虑从后面连向前面的边即可,那么用线段树维护区间最值,不断连接最后查询最大值就行
期望得分40
而对于前面部分小数据,考虑是否可以使用不压缩路径的并查集维护,但是写了半个小时没写出来,就弃掉先去看T1了
经过观察矩阵我们可以发现,当op=1时每条斜线的和等于该斜线左下方的斜对角线上的元素之和的二倍,大概就是这样:
[ 1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 5 6 7 8 9 ] \begin{bmatrix} 1 &16 &15 &14 &13\\ 2 &17 &24 &23 &12\\ 3 &\color{blue}18 &25 &22 &11\\ 4 &\color{red}19 &\color{blue}20 &21 &10\\ 5 &6 &7 &8 &9\\ \end{bmatrix} 12345161718196152425207142322218131211109
如果该斜线上存在一个元素同时存在于斜对角线上那么再加上这个元素,而op=2时对称过去即可
那么现在我们只要能够O(1)求出斜对角线上任意一个元素的大小即可Tn解决这个问题那么就能过掉60分,下面的问题就是如何求出任意矩阵斜对角线上的任意元素,于是我将n=1~7的矩阵的斜对角线全部列了出来,发现了一个有趣的规律:
将其写成矩阵的形式之后发现对于每个数列,它的首元素即使矩阵边长,而尾元素是3n-2,而竖着看的时候就又有一番风趣,每列的都是一个等差数列,而每个数列的公差又能形成一个公差是4首项是1的等差数列,这样经过一定的数学推导就能得出任意矩阵斜对角线的任意元素,我们不妨设n为矩阵边长,要求从左下到右上数斜对角线上的第i个元素,即为下面的式子↓
4 n i − 4 i 2 − 3 n + 6 i − 2 4ni-4i^2-3n+6i-2 4ni4i23n+6i2
经过一段时间的推导后,再抬头一看,时间只剩下十分钟了,因为要留下五分钟检查文件,所以就赶紧写完也没检查就上交了

期望得分

60+40+4+20=124

实际得分

30+15+4+20=69

赛后总结

T1因为太着急对于一部分特判没写完所以挂了30
T2没看到这句(↓

请注意我们保证每次操作后都会满⾜对于 i < n i<n i<n 存在从 i i i 连向 i + 1 i+1 i+1 的边

T3T4没有挂分
1.教训就是以后推导的时候好好看看时间,不要再推过头了!!!
2.好好读题!!!

解题报告

T1:
20分:直接模拟
40/60分:像上面那么做
100分:
经过KH大佬无意中的提示,我想到如果能求任意矩阵斜对角线上前缀和的话,就能O(1)查询了,那么如何求前缀和呢,经过一系列数列矩阵推导和待定系数法,可以得到以下题解↓
定义函数 Sum ⁡ ( x , y ) = 2 ( y ( 2 y 2 + 1 ) 3 ) + y ( x − y ) ( 2 y − 1 ) Num ⁡ ( x , y , s t ) = ( 4 x y − 4 y 2 − 3 x + 6 y − 2 ) [ st为奇数 ] 对于 o p = 1 ∨ k = 1 , 定义 t = ⌈ n − k + 1 2 ⌉ , s t = n − k + 1 a n s = Sum ⁡ ( n , t ) − Num ⁡ ( n , t , s t ) 对于 o p = 2 ∧ k ≠ 1 , 定义 t = ⌈ n + k − 1 2 ⌉ , s t = n + k − 1 a n s = Sum ⁡ ( n , n ) − Sum ⁡ ( n , t ) + Num ⁡ ( n , t , s t ) \begin{aligned} &\text{定义函数} \operatorname{Sum}(x,y) = 2(\frac{y(2y^2+1)}{3}) + y(x - y)(2y - 1)\\\\ &\operatorname{Num}(x,y,st) = (4xy - 4y^2 -3x + 6y -2)[\text{st为奇数}]\\\\ &\text{对于}op = 1 \lor k = 1,\text{定义} t = \lceil \frac{n - k + 1}{2} \rceil,st = n - k + 1\\\\ &ans = \operatorname{Sum}(n,t) - \operatorname{Num}(n,t,st)\\\\ &\text{对于}op = 2 \land k \ne 1,\text{定义} t = \lceil \frac{n + k - 1}{2} \rceil,st = n + k - 1\\\\ &ans = \operatorname{Sum}(n,n) - \operatorname{Sum}(n,t) + \operatorname{Num}(n,t,st) \end{aligned} 定义函数Sum(x,y)=2(3y(2y2+1))+y(xy)(2y1)Num(x,y,st)=(4xy4y23x+6y2)[st为奇数]对于op=1k=1,定义t=2nk+1,st=nk+1ans=Sum(n,t)Num(n,t,st)对于op=2k=1,定义t=2n+k1,st=n+k1ans=Sum(n,n)Sum(n,t)+Num(n,t,st)
T2:
40分:线段树暴力维护区间最大值
100分:线段树暴力维护覆盖某端点的线段中最左端点的sum
T3:
4分:k=0特判
24分:下面的式子↓
∑ i = 1 n C i − 1 m − 1 ∗ i k C n m \frac{\sum\limits_{i=1}^{n} C_{i-1}^{m-1}*i^k}{C_n^m} Cnmi=1nCi1m1ik
T4:
20分:写满n2 的暴力
60分:没写满n2 的暴力

猜你喜欢

转载自blog.csdn.net/MuLaSaMe/article/details/120455121