2023.02.16 模拟赛小结

更好的阅读体验戳此进入

赛时思路

T1

给定 n×m01 矩阵,你需要构造一个初始矩阵,每过 1 单位时间,所有 1 会八向扩展使得周围所有 0 变成 1。过程不能使得 1 向矩阵外扩展,你需要使得你构造的初始矩阵能够最大化扩展次数,输出扩展次数与任一最优合法初始矩阵。

n×m106

一个显而易见的思路,用 3×3,5×5, 的矩阵去填充即可,并且尽量用更大的填充,二分答案然后枚举验证跑一下即可,实现上可以强行维护二位前缀和强行做,也可以写个宽搜之类的东西搞一搞,比较简单,签到题。

(最后拿到了 95pts 主要是因为 ty > M ? M : ty 最开始写成 n 了。。。

Code

T2

给定序列,每次从序列中取数直至取空,每次取 ai 时的贡献为 min(ai1,ai+1),若不存在则贡献为 0,最大化贡献,求最大值。

赛时思路是考虑记录 vali 表示两侧数的较小值,记录 prii 表示 vali 减去其两侧 vali 的删除而导致的贡献减少量,以 pri 为关键字丢到优先队列里,然后每次取出后动态维护,即对 i 维护 prei,preprei,nxti,nxtnxtipri 变化,大概这样跑一下,当然最终对拍时发现假了。

1T10,1n106,1ai106

Code

T3

给定序列 pn,qn,形成函数序列 fn,其中 fi(x)=xpi+qi

给定 m 个操作,包括单点修改 pi,qi,以及给定 s,t,查询 ft(ft1(fs(x)))

n,m5×105

赛时写了个暴力,就不挂 Code 了。

T4

奇怪题,没写。

正解

T2

考虑三个数 x,y,z,若 xy,zy,那么删 y 最优,处理后最终剩下一个单峰的凸函数,考虑最大值次大值,显然其相邻且不会被作为答案,于是考虑第三大,若第三大与最大值相邻则删去最大值,反之则一定与次大值相邻,此时删除次大值,以此维护即可。

T3

首先说一下 @sssmzy 的高妙思路(确实巧妙,必须 %%%%%%%

考虑下取整的意义就是正常的除法之后再取整,于是直接考虑我们不考虑下取整,认为其为标准除法,然后则可以在线段树上合并,最后再取整即可。有一个问题就是这个东西并不是适用于所有,本题适用应该是因为对于 <1 的小数部分除以一个 1 的数一定不会变得 1,所以合并之后不会对答案造成影响。还有个细节就是不能用 long double,会 TLE,所以说 long double 真的很慢。(@sssmzy 就是因为 long doubleTLE

UPD

update-2023_02_16 初稿