5.3 SYSU校内训练

头一天晚上熬了夜,一觉睡到下午。
比赛开了2h后才到,然后顺理成章的被吊打

终榜

A

(n)个怪排成一排

两种操作

1:(l,r,w) 表示学会了一个花费为(w)的技能,效果为清掉([l,r])中的所有怪
2:(k a_1 a_2.....a_k) 询问杀死这些怪的最小花费是多少

保证(w=1)

随便贪心一下就可以了
每加入一个怪,考虑选择一个覆盖这个点的且右端点尽可能靠右的线段即可。
线段树维护即可。

B

求最短非回文串长度
显然只要有不止一种不同字母答案即为(2)

C

并查集或各种数据结构维护一下连续段即可

D

考虑枚举(s_i=s_j=k)的在两个序列上对应的位置
显然会分别是一段区间
因此这个两个区间组合在一起就会产生一个贡献
这个贡献显然可以用二阶差分来维护

E

签到题

F

签到题

G

好像还不是很会,明天问一下xyy

H

给你一个(+1)(-1)组成的序列
每次操作可以合并两个相邻的位置,替换为它们的乘积且获得一个相同大小的收益
将序列合并成一个数字,最大化收益和。

考虑一个显然的性质
合并两个连续的(1)一定不亏
那因此序列可以转换为一些连续的(-1)的段被单个的(1)分割开

中间那些(-1)则可以两两配对来构成(1)
此时需要考虑的一个点就是
(-1)的连续段长度为偶数时,可以直接全部变成(1),没有什么问题
但为奇数时,一定会剩下一个(-1)我们需要考虑一下把最后那个(-1)放在什么位置。

(-1 -1 -1 1)

(1 -1 -1 -1)
手玩这两个例子可以发现
中间的(-1)段是无所谓的
只有两头上的(-1)段应该把(-1)留在外侧,(1)留在内侧。

经过这样一番转化后,序列就变成(+1)(-1)的交替序列了

直接计算即可。

I

签到题

J

签到题

原文地址:https://www.cnblogs.com/Creed-qwq/p/14730896.html