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 170 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\) 同理。

posted @ 2024-01-27 21:01  ydq1101  阅读(59)  评论(0)    收藏  举报