ABC417-题解
前言
爽到了
差点AK,这一次真的比上次考的太多了
而且AT出分还是挺快的,这一次 +144 差一点点就可以AK了
没事,接下来就开始正题吧
题目
ABC题
太简单不讲,直接跳过
A是要求一个字符串 \(A -> n-B\) 位,直接输出即可
B是要求维护一个数组满足每一次删除一个数字,直接暴力删除即可
C要求在一个 \(a_n\) 数组里面找到有多少对 \((i,j)\) 满足 \(a_i+a_j=j-i\),移项 \(a_i+i=j-a_j\) 使用桶维护即可。
D
极其恶心的一个题目
题目意思
现在有 \(n\) 个三元组 \(p_n,a_n,b_n\),每个三元组运算如下,如果你的 \(x\le p_i,x=x+a_i\) 否则 \(x=\max(0,x-b_i)\),给出 \(q\) 组询问,每组给出一个 \(x\) 求经过所有的三元组运算后 \(x\) 的值。
\(p_i,a_i,b_i\le 500\)
做法
想出来很快,主要是注意边界
首先我们设 \(ans_{i,j}\) 表示经过了 \(i->n\) 的所有三元组,一开始为 \(j\) 最终的运算的值,这个是可以 \(O(1000n)\) 求出来的,接下来就是对于一个询问,如果他在我们的预处理范围之内,我们就直接输出,否则的话他一定是在一个位置 \(pos\) 前,一直在减少 \(b_i\) 的心情,而这个 \(pos\) 的位置正是 \(x-\displaystyle\sum_{i=1}^{pos} b_i\le 500\) 的位置,预处理 \(b_i\) 前缀和之后二分即可
E
超级简单秒了
题目意思:给你一个图,要求 \(x\) 到 \(y\) 的字典序最小的路径并输出
做法:一个点如果走过了并且没有找到答案就说明这个点和终点不达,所以记录一个 \(vis_i\) 表示 \(i\) 是否走过就可以了,然后使用 vector 建图,对于每一个点把他的出边都 \(sort\) 一边即可
F
也很简单的板子,秒了
题目意思
给出一个长度为 \(n\) 的序列 \(a_n\),每一次操作 \(i\) 是将所有 \(lt_i\le j \le rt_i\) 的 \(j\) 的 \(a_j\) 都加起来,然后随机放到 \(lt_i\) 到 \(rt_i\) 中的任意一个数里面,其他的数字都变成 \(0\),求最后的期望,对一个质数取模。
做法
首先每一次操作就相当于是把整个区间里的值都赋值为这个区间的平均值,考虑平均值要知道什么,必然是区间和和区间长度,区间长度询问的时候就知道了,区间和和区间赋值可以直接用线段树维护,每一次询问用线段树在线维护就可以了。
G
有点难度,赛时没过,知道问题但是时间不够了,差一点点还是很可惜的,但是不是非常难
题目意思
定义 \(src_0=0 src_1=1\)
给出 \(n\) 组询问,每一次都是询问一个 \(src=src_{lt_i}+src_{rt_i}\) 的第 \(k\) 位是什么,然后将 \(src_{i+1} = src\)。
做法
超级简单,每个字符串维护一个长度,然后对于一次询问,肯定是在他的左节点或者右节点里面,就看 \(k\) 和 \(siz_{lt_i}\) 的大小关系,这个就很想线段树上游走,这样的话就可以直接 \(log_2n\) 做。
后记
这一场比较简单,分了好几次才写完,但是总而言之还是比较有记录价值的,至少这一场差点 AK 的遗憾还是要下一次弥补弥补哈哈哈
但是以后千万不要忘了
- 1.看数据范围
- 2.对于长度为 \(n\) 的数组,清空 \(0 -> n+1\),因为你不知道 \(n+1\) 到底会不会用
- 3.开 ios 读入优化
望未来可期!

浙公网安备 33010602011771号