【LGR-221-Div.3】洛谷基础赛 #21

A

简单模拟题,顺着题目的意思来即可。

B

如果直接暴力,那么时间复杂度将达到 \(\mathcal{O}(n^4)\),明显会超时。

于是,我们可以先预处理每一个人邀请的要求相似度,再看 1 号与他的相似度,如果一样,那么就可以直接加到答案里;如果只相差 \(1\),那么就对于每一个可以改变的数,把这个人加到它的桶里面,最后只要看一下哪个桶里人最多即可。

C

首先,可以发现对于一个 a,可以与它组成 va 的组数是它前面 v 的数量;同样,对于一个 n,可以与它组成 van 的组数是它前面 va 的数量,那么我们就可以预处理出它原本的对的数量。

之后呢,我们可以考虑前后两次交换会发生什么:

  1. 两数相等:什么也不会发生。
  2. va:交换后变为 av,原本后面的 a 可以与前面的 v 结成一对,但现在不行了。所以这对后面的所有 n 都要少去一组,所以会减去后面的 n 的数量。
  3. vn:交换后变为 nv,不影响
  4. 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\) 进入范围的玩家都加入优先队列,之后再弹出队顶,判断是否满足条件,不满足就直接删除并重复这个步骤,否则直接转移。

完结撒花🎉

posted @ 2025-05-04 22:18  jackzhang2013  阅读(18)  评论(0)    收藏  举报