AtCoder Beginner Contests 380~399
ABC380
G
题意
在已给出的 \(1\) 到 \(N\) 的排列 \(P\) 中任选一段长度为 \(K\) 的连续区间,将其重新随机打乱,求此操作后 \(P\) 的逆序对数的期望值。
分析
先求出原先排列的逆序对数 \(s\)。设选取的区间 \([i,i+K-1]\) 逆序对数为 \(t\),则那些没有被更改的区间 \([1,i-1]\) 与 \([i+K,N]\) 的逆序对数为 \(s-t\)。枚举 \(i\),求出对应的 \(t\),并对 \(s-t\) 求和,这就是未修改区间的逆序对数总和。再除以 \(N-K+1\) 就是期望。具体来说,先求 \(P_1\) 到 \(P_N\) 的逆序对数,再求 \(P_1\) 到 \(P_K\) 的逆序对数,再求 \(P_i\) 到 \(P_{i+K-1}\) 的逆序对数,每次在左边去掉一个数,在右边加入一个数,并统计贡献。
然后一个长度为 \(K\) 的区间经过随机打乱的逆序对数期望为 \(\frac{1}{2}C_{K}^2\)。
把两者期望加起来就是答案。
ABC382
E
题意
有无数个包,每个包中有 \(N\) 个物品,打开包时,每个物品出现的概率为 \(P_i\),求要获得至少 \(X\) 个物品,打开包数量的期望值。
分析
令 \(f_i\) 为打开一个包正好获得 \(i\) 个物品的概率,\(g_i\) 为至少获得 \(i\) 个物品打开包数量的期望值。
ABC383
E
题意
有一个简单无向连通图。定义一条路径的权值为路径上所有边的边权最大值。定义 \(f(A,B)\) 为 \(A\) 到 \(B\) 的所有路径中权值的最小值。给定两个长为 \(K\) 的数列 \(A\) 和 \(B\)。将 \(B\) 重新排列,求 \(\sum\limits_{i=1}^{k}f(A_i,B_i)\) 的最小值。
分析
路径都在最小生成树上。然后考虑贪心。
按边权从小到大排序,Kruskal。如果选取的边的两个端点不在同一个连通块上,则统计对两个连通块中未匹配的点的贡献。
F
题意
一家商店里有 \(N\) 种商品出售。其中 \(i\) 件产品的价格为 \(P_i\) 日元,效用值为 \(U_i\),颜色为 \(C_i\)。
您将从这 \(N\) 件产品中选择一些子集购买(可能一件都不买)。所选产品的总价最多为 \(X\) 日元。
您的满意度为 \(S + T \times K\),其中 \(S\) 是所选产品的效用总和,而 \(T\) 是所选产品中不同颜色的数量。这里, \(K\) 是一个给定的常数。
您选择的产品将使您的满意度最大化。求最大满意度。
分析
0/1 背包加上了颜色限制。
按颜色从小到大对物品排序。设 \(dp_{i,j}\) 表示选取的物品最大颜色不超过 \(i\),总价格不超过 \(j\) 时的最大满意度。
ABC388
G
题意
有 \(N\) 个餅,按大小升序排列。其中第 \(i\) 个餅的大小为 \(A_i\)。
给定大小分别为 \(a\) 和 \(b\) 的两个餅 \(A\) 和 \(B\),当且仅当 \(a\) 至多是 \(b\) 的一半时,将餅 \(A\) 放在餅 \(B\) 的上面,就可以做出一个鏡餅。
给你 \(Q\) 个整数对 \((L_i, R_i)\)。求每个 \(i\) 的下列问题:
- 只用第 \(L_i\) 到第 \(R_i\) 的 \(R_i - L_i + 1\) 个餅,你能同时做出多少个鏡餅?
分析
首先发现一个性质:对于一个区间 \([L,R]\),最优解一定是开头的 \(k\) 个匹配末尾的 \(k\) 个,且 \(L+i-1\)(\(1\leq i\leq k\))匹配 \(R-i+1\)。
法一
区间询问,没有强制在线,可以考虑莫队。
增加操作如果是在右端,设当前的答案为 \(k\),把 \(A_{L+k}\) 与新加入的 \(A_{R}\) 进行比较,如果 \(2A_{L+k}\leq A_{R}\),则 \(k\) 加一。增加操作在左端同理。
删除操作好像不太好弄,怎么办?这时候就要拿出回滚莫队!
法二
对于一个区间,可以二分 \(k\) 的值解决。时间复杂度瓶颈在 check 的过程上。check 的过程为判断是否 \(\forall i\in [1,k],2A_{L+i-1}\leq A_{R-i+1}\)。考虑优化这个过程。
令 \(P_i\) 表示满足 \(2A_j\leq A_i\) 的最大的 \(j\)。对于第 \(R-k+i\) 个餅,他要匹配的是第 \(L+i-1\) 个餅,所以 \(P_{R-k+i}\geq L+i-1=L+(R-k+i)-1+k-R\),移项得到 \(P_{R-k+i}-(R-k+i)\geq L+k-R-1\)。这时,check 就转化成求最大的 \(k\),满足 \(\displaystyle\min_{i=R-k+1}^{R}(P_{i}-i)\geq L+k-R-1\)。预处理 \(P_i\),二分 \(k\),RMQ \(O(\log N)\) 查询。总时间复杂度 \(O(N\log^2 N)\)。
ABC389
E
题意
有 \(N\) 种商品,每种商品各有 \(10^{100}\) 个。购买 \(k\) 个第 \(i\) 种商品需要花费 \(k^2P_i\) 日元。在总开销不超过 \(M\) 日元的前提下,求出最多可以买到的商品数量。
- $ 1\leq N\leq 2\times 10^{5} $
- $ 1\leq M\leq 10^{18} $
- $ 1\leq P_i\leq 2\times 10^{9} $
分析
一个商品的价格可以拆成 \(p,3p,5p\dots\),第 \(k\) 次的价格为 \((2k-1)p\)。用优先队列贪心会超时。观察到价格具有单调性,且最后买的商品价格会停留在一个最大值,所以可以二分这个最大值。设这个最大值为 \(X\),\((2k-1)p\leq X\),\(k\leq \dfrac{\frac{X}{p}+1}{2}\)。二分得出这个 \(X\) 后,如果还有一些剩下的钱,用它去买价格为 \(X+1\) 的物品。
F
题意
高桥计划参加 \(N\) 场 AtCoder 竞赛。
在第 \(i\)( \(1 \leq i \leq N\) )场比赛中,如果他的评分在 \(L_ i\) 和 \(R_ i\) (含)之间,他的评分就会增加 \(1\) 。
您会得到 \(Q\) 个查询,格式如下:
- 给出一个整数 \(X\)。假设高桥的初始评分为 \(X\),请计算他参加所有 \(N\) 比赛后的评分。
分析
注意到一个性质:所有时刻的评分相对大小不变。证明很简单。
所以把这些评分排序,用线段树维护,每次比赛相当于在线段树上二分端点,然后区间加。需要维护区间最大值和最小值。
ABC397
F
题意
给定一个长度为 \(N\) 的序列 \(A\ (\forall 1\leq i\leq N,1\leq A_i\leq N)\)。把序列分成 \(3\) 个连续段,每段长度至少为 \(1\)。求每段中不同的数字个数之和的最大值。
分析
设 \(w(x,y)\) 为 \(A_x,A_{x+1},\dots,A_y\) 不同的数字个数,则答案为 \(\underset{1\leq j<i\leq N-1}{\max}w(1,j)+w(j+1,i)+w(i+1,N)\)。
容易想到:
-
对于“区间中有多少不同的数”这种问题,可以维护 \(lst_i\),\(lst_i\) 表示 \(A_i\) 的前一个与 \(A_i\) 相同的数的下标。\(w(x,y)\) 即为满足 \(x\leq i\leq y\) 且 \(lst_i<x\) 的 \(i\) 的个数。
-
枚举 \(i\),则问题转化成对于每个 \(i\),如何快速找到 \(j\),使得 \(w(1,j)+w(j+1,i)\) 最大。
正好最近学了决策单调性。发现 \(w\) 满足反四边形不等式,再经过打表验证,确实有决策单调性。然后我就写了单调队列+二分+主席树,虽然复杂度为 \(O(N\log^2 N)\),但还是 T 了。提交记录
考虑借鉴 ABC371E 的思路:每次加入最右端的数会对不同的 \(j\) 的答案产生哪些影响。实际上这就是动态规划的思路。
怎么那题不用线段树你就想到用线段树,这题要用你反而想不到了?

浙公网安备 33010602011771号