目录

Eduncational codeforces round 93

A Bad triangle

题意:给n个数,要找出三个数使这三个数满足不能构成三角形,输出其中一种。

题解:排序,明显最优的情况是取两个最小,一个最大,看能不能构成三角形即可。

B Substring Removal Game

题意:a与b经行一场比赛,比赛内容是给一个01串,每次可以对这个字符串做如下操作,消除任选个数个连续的0或1,a与b分别操作,知道字符串全部被取完,取的1最多者获胜。a先开始,问最后a的得分是多少

题解:是个博弈论,其实也没啥好博弈的,肯定是每次选择1最多的连续串经行操作最优,所以找出所有连续的1串然后隔一个计算一次即可。

C Good Subarrays

题意:给一个由n个数字组成的数组,问有多少对数字$(l,r)$满足$\sum_{i=l}^{r}a_i=r-l+1$

题解:考虑对$a_i$求前缀和,用b_i表示,这样就可以把上面那个式子转化成$b_r-r=b_{l-1}-(l-1)$,维护一个新数组$c_i=a_i-i$,下标从0开始,离散化之后,记录每个数字出现了多少次,然后两个相同的可以组成一组,若一个数字出现了$t$次,那它做出的贡献就是$t*(t-1)/2$,累加即可。

D Colored Rectangles

题意:给出三串数,每次选择不同串的两个数相乘加入总答案,问最后可能得最大值是多少。

题解:本来以为这题能贪,然而终成人生三大错觉。正解是分别对这三串数排序之后dp,$dp[i][j][k]$表示在第一行选i个,第二行选j个,第三行选k个可以得到得最大值,然后分别枚举三种转移情况取最大值即可完成转移。

E Two Types of Spells

题意:有火焰魔法和闪电魔法两种魔法,第i个魔法会对怪物产生$a_i$得伤害,一旦一个魔法跟在闪电魔法后面,则该魔法造成的伤害会翻倍。问累计一共能造成多少伤害?要求支持插入一个新魔法,和插入后即时查询得操作。

题意:首先可以确定的一点是,当前只要存在火焰魔法,假设现在一共有$k$个闪电魔法,则一共会有$k$次翻倍的机会,如果没有火焰魔法则只有$k-1$次翻倍机会。可以用set维护两个数组一个是可以翻倍得数,还有一个是一倍的数,再维护一下火焰魔法,之后每次操作先按照要求删去或者添加,添加时比对一倍的最大数,若比它小则加入,若比他大则加入两倍的数组。每次操作完之后,比对闪电魔法的数量和翻倍数组中数的数量,多减少补,最后比较火焰魔法最大$a_max$(若没有则为0)和翻倍魔法最小$b_min$的大小,若翻倍魔法最小大,则需要减去$b_{min}-a_{max}$,因为最小的闪电魔法无法被算进去。否则则不用算,因为最小的闪电魔法一定不会被算进去。输出答案即可。