atcoder近期比赛记录
ABC 235
A , B , C , D跳过
ABC235E $\text{MST+1}$
题意:给出无向图,每次询问对于若新加入边$(u,v,w)$能否成为最小生成树中的边。
同P4180,若这条边可能成为最小生成树上的边,则该边两端点在最小生成树上的路径中一定有一条不小于w的边。
LCA+树上倍增 即可解决。
将询问离线再跑MST也是一种解决方式。
ABC235F $\text{Variety of Digits}$
求$[1,n]$中包含数字$c_1\dots c_m$的数之和 , $n\leq 10^{10^4}$
考虑数位dp,用$dp[i][st]$表示前i位,数字的出现情况为st的和。
记忆化搜索形式更方便实现。
ABC235G $\text{Garden}$
有n个花园,每个果园要放至少一种植物,三种植物分别有a,b,c个,求方案数。
$n^4$ dp不说了。
考虑$n^2$做法:容斥,以将问题转化为好解决的子问题。
所有果园都种了至少一种植物 = 所有种植情况 - 有至少一个指定的果园没有种植物 + 至少两个指定的果园没有种植物 ....
$ans = \sum _{i=1} ^{n} f(i) *(-1)^i$
其中$f(i) =\text C_n^i *\sum_{k=1} ^{\min(a,n-i)}\text C_{n-i} ^ k * \sum_{k=1} ^{\min(b,n-i)}\text C_{n-i} *\sum_{k=1} ^{\min(c,n-i)} $
注意是指定哪些果园没种,可以有别的果园没有种植
我们可以$O(n)$地求出$f(i)$,所以总复杂度为平方级别。
然后将上面的式子的三个部分分别看作$A(x),B(x),C(x)$那么可递推计算$A(x) ,B(x),C(x)$,在纸上推一下可以发现。
$A(x) = A(x+1)*2 - \text C_{n-i-1}^a$
b,c同理。
递推即可,复杂度为$O(n)$
ARC133
ARC 133A跳过。
ARC 133B $\text {Dividing Subsequence}$
题意:给出两个排列$p,q$,在两个排列中分别找出两个子序列满足以下要求:
1 . $len(p) = len(q)$
2 . $p_i | q_i$
3 . 在满足以上要求的前提下长度最长 , 求这个长度
首先想到$O(n^2)$ $LCS$的dp , 把其中的$p_i=q_i$换成$p_i|q_i$即可。
考虑优化。
发现题目给出的是两个排列,我们试着处理出对于每个$q_i$能够与之配对的$p_i$,其总数是$n\log n$级别。
定义$dp[i]$表示q的前i个对应到p中的最大长度。
那么$dp[i] = \min _{j<i ,p_j|q_i} dp[j]+1$
用线段树将区间$[1,i-1]$取max为mx,并用mx+1去区间最值操作更新即可,为了避免重复计算贡献,将每一个对应的更新存下来最后操作。
ARC 133C $\text{Row Column Sums}$
跳过
ARC 133D $\text{Range XOR}$
稍后整理
ABC236
ABC236 A , B , C , D 跳过。
ABC236E $\text{Average and Median}$
给出一个序列$A$,您需要选择一个子序列,两个相邻的数不能都不选择,分别求:
子序列的平均数的最大值。
子序列的中位数的最大值。
考虑中位数的套路:二分中位数,大于等于的视为1,小于的视为0,看能否选择和大于等于总数的一半。
然后可以dp进行check:
$dp[i][1]$ 选了上一个
$dp[i][0]$ 没选上一个
同理,平均数也考虑类似的套路,设平均数为x,二分x,将所有数减去x,求最后能否使得和大于零,同样使用dp。
ABC236F $\text{Spices}$
每个数有一个代价,求集合$\{1\dots2^n-1\}$的线性基且代价最小。
将这些数按代价排序,按顺序插入线性基,能插入就加上代价,贪心求出答案。
证明稍后补充。
ABC236G $\text{Good Vertices}$
题意:在一个有向图上依次连边,求每个点在最早什么时刻可以恰好经过L条边走到。
题意可以转化为 在t时刻连的边的边权为$t$,求路径上最大边权的最小值。
(然后我就开始二分了,艹)
令$dp[i][j]$表示走到点i,恰好走j条边的最小最大边权,则有转移:
$dp[i][j]=min_{k=1}^n \{max\{dp[i-1][k], w(k,j)\} \} $
然后我们就有了$O(n^3L)$的dp
考虑怎么优化
另一个著名的问题:点u到点v的代价是路径上的边权之乘积,求一个点到另一个点的所有长度为$L$的路径的代价之和。
这道题目的转移就为$dp[i][j] = \sum _{k=1}^n dp[i-1][k]*(w[k][j])$
就是矩阵乘法转移,维护$dp[i][1\dots n]$矩阵乘上边的邻接矩阵就可以得到$dp[i+1][1\dots n]$
$$ F(i) = \begin{bmatrix} dp[i][1]\\ dp[i][2]\\ \vdots \\ dp[i][n] \end{bmatrix} = \begin{bmatrix} dp[i-1][1]\\ dp[i-1][2]\\ \vdots \\ dp[i-1][n] \end{bmatrix} \times K $$
其中$K$为图的邻接矩阵
将上面那一题的$* , +$ 换成 $\max , \min$ 就是此题了
由于$\min ,\max$运算都有交换律,结合律,且之间存在分配律,所以同理可以使用广义矩乘维护,使用广义矩阵快速幂加速即可。
即$F(i) = F(0) * K^i$
ARC134
ARC134A跳过
ARC134B $\text{Reserve or Reverse}$
题意:给出一个字符串$|S|\leq 2*10^5$ ,选择一个子序列,翻转它,使得翻转后的字符串的字典序最小,求翻转后的字符串。
题意可以转化为k对呈包含关系的交换。
贪心地,我们要把小的字符换到前面,对于一个位置i,选择能换的最小的字符一定是最优的,所以对于每个字符找到它和上一次交换之间最小且尽可能靠右的字符即可。
然后我就写了线段树区间查尽可能靠右的最小字符(还好码出来了)。。。
正解:英文字母只有26个,开26个vector存每个字母的位置即可。
ARC134C $\text{ The Majority}$
稍后整理
ABC237
ABC237A , B , C , D跳过
ABC237E $\text{skiing}$
题意: 有一些点,每个点有高度,有一些边连接这些点,从高的点到低的点的价值是高度差,从低的点到高的点的代价是负的高度差的两倍,求一条代价最大的路径。
发现此图”来回“的价值一定是小于0的,所以最长路最多只会经过每个点一次,spfa即可。
冷知识:spfa没死
可以证明spfa在此题的复杂度正确(但我不会
ABC237F $\text{|LIS| =3}$
给出 $n(\leq10^3 ) , m(\leq10)$求满足以下要求的序列的数量mod 998244353。
由于总共不同的输入只有$10^4$种,所以$O(1)$打表暴捶正解/kk
-
1.长度为$n$
-
2.由$[1,m]$中的数组成
-
3.其LIS的长度恰好为3
状态类似基于元素的LIS
这个元素能使得$LIS$的长度增加当且仅当它大于等于长度为1/2/3的lis的最后项的最小值。
所以状态就定义出来了$dp[i][x1][x2][x3]$表示前i个数最小值为$x1$,长度为2的LIS的最小值为$x2$,长度为3的$LIS$的末尾的最小值为$x3$
刷表转移即可
复杂度$O(n m ^4)$
ABC237G $\text{Range Sort Query}$
题意:
给出排列${p} = \{1\dots n\}$ 有$q$次操作,每次为$(l,r,c)$将$[l,r]$内的元素按升序(c=1)/降序(c=2)排列,求最后元素$c$的位置。
日本人们致敬了河北省选 <排序> ,真是有创造力!(yygq
所以可以直接模仿那道题的思路()
较为明显的,若查询的数5,则6,7,8等价,1,2,3,4等价,因为其他元素之间的顺序不会影响5的位置。
所以维护线段树维护两个信息:区间中比这个数大的数的数量,比这个数小的数的数量即可。
一个trick :将大于这个数的数设成2,小于设成0,这个数本身设成1,然后区间求和、区间替换即可。
区间求和得到2的数量即$\lfloor\frac {sum} 2\rfloor$
ABC238
ABC238 A , B , C , D跳过
ABC238E $\text{Range Sums}$
题意:
有n个数,给出q组$[l,r]$表示你知道$[a_l\dots a_r]$的和,求最终能否求出整个$a$数组的和。
套路题 。
考虑前缀和,$a_1 + \dots + a_n = s_n$
已知$s_0 = 0$
每个区间和转换为$s_r $和$s_{l-1}$能互相推导。
使用并查集即可。
最后检查0和n是否在同一个并查集里。
ABC238E $\text{Two Exams}$
题意:有n个人,每个人有两个排名,现在需要选择k个人,任意一个选择的人和任意一个没选择的人 , 被选择的人应至少有一个排名小于没有被选择的人。
求方案数mod 998244353
$k\leq n\leq 300$
发现答案与顺序无关,先按排名一为关键字排序,这样按顺序考虑就不要处理第一排名了。
令排序后的排名2序列为$q_1\dots q_n$
则每一个i前面的没有被选择的$q_j$一定满足$q_j <q_i$
$dp[i][j][k]$表示前i个元素,选择了j个,没有被选择的最小$q_i$为k的方案数。
若选第i+1个,则$dp[i+1][j+1][min(q_{i+1},k)] \gets dp[i][j][k]$
不选的前提为$q_{i+1} > k$
则$dp[i+1][j][k] \gets dp[i][j][k] $
答案即为$\sum dp[n][k][1\dots n]$
ABC238F $\text{ Cubic?}$
题意:给出序列${a_1\dots a_n}$ , 以及$q$个询问$(L,R)$
每次询问$\prod_{i=L}^R a_i$是否为一个完全立方数。
$n , q\leq 2\times10^5 , a_i\leq10^6$
正解不太理解的神奇随机化算法稍后来补充。
因为区间询问可离线,所以考虑莫队。
先将所有数分解质因数并存到vector中
莫队维护所有质因数项的次数mod 3的余数
在加上一个ans维护目前不是3的倍数的项的个数,若查询时为0则答案为Yes。
Ex好像不可做(小声
总结:假期没干啥,太颓了,基本上就只打了这么点题加几道广义矩乘和线性基,,, 只是保持一下手感吧,人废了,其他人一个比一个卷%%%
本文已经结束了。本文作者:ღꦿ࿐(DeepSea),转载请注明原文链接:https://www.cnblogs.com/Dreamerkk/p/17970997,谢谢你的阅读或转载!

浙公网安备 33010602011771号