0%

2021.09.10模拟赛

渔舟唱晚,响穷彭蠡之滨;雁阵惊寒,声断衡阳之浦。

2021.09.10模拟赛

T2没细想,T3大失误 -84 pts

A.Strange

Strange

考虑只相交的线段 = 所有线段 - 包含的线段 - 不交的线段

不交的线段找询问左端点左边的线段树右端点个数,右边同理

包含的线段先离线下来,按右端点排序,加入线段树区间的左端点,直接在树状数组上查询区间的端点数量即可

code

B.加冕

加冕

考虑大力 dp

dpSdp_{S} 是达成质因子状态的最小代价

转移 dpS=minTSdpT+f(ST)dp_{S} = \min\limits_{T \sub S}dp_{T}+f(S-T)

计算 f(S)f(S) 可以用同于最短路的方法

pp 为模数,在模 pp 意义下操作 q×xq\times xq+1q+1

dis0dis_0 即最小值

code

C.交错的字符串

交错的字符串

处理出前一半的哈希值然后和后一半的配对即可

因为 A+B=A+BAA=BBA+B = A'+B' \Rightarrow A-A' =B'-B

所以记录下哈希值的差值即可

code

D.爬

爬就爬,我最会爬了

叉人神题

大概的思路是贪心的按照 aibia_i-b_i 排序,然后再不被淹的过程中答案具有单调性(显然 xx 天能出去 x+1x+1 也能)

所以二分时间,确定时间后考虑最优策略要么是把前面的一个 bb 很大的值最后吃,或者是把后面的一个 aa 很大的最后吃

分别特判一下

在找 bb 最大的值需要特判一下拿掉了这个值会不会导致中间被淹,而且因为 aibia_i-b_i 单调递减,所以拿掉就不合法的一定是一个前缀

code

Extra.

A.防线

防线

看起来就很线段树合并

让线段树的节点代表填满最左端的 11 和最右端的 11 中间的最小代价

考虑向上 pushup 的过程

考虑左区间最右的 11 和右区间最左的 11

中间的 rl1r-l-100 一定要他们填满,所以 rl1r-l-1 和当前的答案取 max\max 合并

最终最外围的 m(rl+1)m-(r-l+1) 个点一定需要这么多次操作,取 max\max

code

B.钦定

钦定

先把没用的点区间,让操作序列单增

反向考虑贡献

当前区间长度如果为 xx

那么他会用到长度为 yy 的区间 xy\lfloor\dfrac{x}{y}\rfloor 次,和 xmodyx \bmod y 的区间一次

如果 xx 区间被用过了 tt

相应的 yy 区间会加上 xyt\lfloor\dfrac{x}{y}\rfloor t 次, xmodyx \bmod y 用到了 tt

所以先加入大的区间,反向更新贡献,然后区间长度 n\le n 的做一下后缀和就是答案

code