sol - USACO 2024 JAN B
\(\text{T1}\):
考虑 \(a_i=a_{i-1}(i>1)\) 的情况,这个时候一个数一个数扩展就可以完成,再考虑 \(a_i=a_{i-2},a_i\neq a_{i-1}(i>2)\) 的情况,显然 \(i\sim {i+2}\) 这个区间都可以变成 \(a_i\),那么就成了第一种情况。
注意行末空格。
\(\text{T2}\):
玄学。
按照题意模拟,但是这样会 \(\text{TLE}\) 五个点。这样是因为会出现在 \(k\) 和 \(k + 1\) 这两个点中反复跳的情况,卡一下操作次数即可,我用的是 \(10^7\)。
\(\text{T3}\):
还是玄学。
看到区间问题,想到前缀和和差分。
不要问为什么不是数据结构,问的话因为这是铜组。
举个例子:1 2 -2 -7 5,差分一下:1 1 -4 -5 12,我们手动算出下一步应该是 0 0 -5 -11 0,差分一下:0 0 -5 -6 11。
看得出来吗?看不出来吧。
再来差分一下:1 1 -4 -5 12 变成了 1 0 -5 -1 17,0 0 -5 -6 11 变成了 0 0 -5 1 17,发现了什么?对,第一个元素变成 \(0\) 了?!根据这个推广到答案就是差分数组的差分之和(绝对值)。
设当前 \(a\) 数组为 \(a_1,a_2,a_3,a_4\),第一遍差分:\(a_1,a_2-a_1,a_3-a_2,a_4-a_3\),再差分一遍:\(a_1,a_2-a_1,a_3+a_1-2a_2,a_4+a_2-2a_3\)。
下一步根据题目,\(a=\{0,a_2-2a_1,a_3-3a_1,a_4-4a_1\}\),差分两遍后:\(0,a_2-2a_1,a_3-2a_2+a_1,a_4-2a_3+a_2\),与上一个的差别就是第一个的 \(a_1\) 变成了 \(0\)。
感性理解一下:
-
\(a_i>0\),那么 \((i, n]\) 这个区间减一个等差数列,那么差分的差分数组下标大于 \(i\) 的不变,第 \(i\) 位变成 \(0\),以此类推。
-
\(a_i\le0\) 同理。

浙公网安备 33010602011771号