【LGR-221-Div.3】洛谷基础赛 #21
A
简单模拟题,顺着题目的意思来即可。
B
如果直接暴力,那么时间复杂度将达到 \(\mathcal{O}(n^4)\),明显会超时。
于是,我们可以先预处理每一个人邀请的要求相似度,再看 1 号与他的相似度,如果一样,那么就可以直接加到答案里;如果只相差 \(1\),那么就对于每一个可以改变的数,把这个人加到它的桶里面,最后只要看一下哪个桶里人最多即可。
C
首先,可以发现对于一个 a,可以与它组成 va 的组数是它前面 v 的数量;同样,对于一个 n,可以与它组成 van 的组数是它前面 va 的数量,那么我们就可以预处理出它原本的对的数量。
之后呢,我们可以考虑前后两次交换会发生什么:
- 两数相等:什么也不会发生。
va:交换后变为av,原本后面的a可以与前面的v结成一对,但现在不行了。所以这对后面的所有n都要少去一组,所以会减去后面的n的数量。vn:交换后变为nv,不影响an:交换后变为na,原本后面的n可以与前面的a结成一对,但现在不行了。所以要减去a贡献的组数,也就是这组前面的v的数量
于是,我们只要用数组存一下“后面的 n 的数量”与“前面的 v 的数量”,再在每次操作是更新这两个数组即可。
D
可以发现,这题与背包问题十分相似,于是我们可以设计出这样一个 DP:
\(f_i\) 表示 \(1\sim i\) 分钟能获得的最大兴奋值之和
首先,\(f_i\) 可以从 \(f_{i-1}\) 转移过来,因为这分钟没有人来玩
对于每一个满足条件的玩家,\(f_i\) 也可以从 \(f_{i-k}+w\) 转移
但目前位置,时间复杂度为 \(\mathcal{O}(n^2)\),再看看数据范围——嘶,怎么会能,竟然连背包都会超时。
看来我们得想办法优化了。
我们可以发现,转移方程 \(f_{i-k}+w\) 不论是哪个玩家,都含有 \(f_{i-k}\),所以我们可以采用优先队列优化。
每次将所有 \(l\) 进入范围的玩家都加入优先队列,之后再弹出队顶,判断是否满足条件,不满足就直接删除并重复这个步骤,否则直接转移。
完结撒花🎉

浙公网安备 33010602011771号