爆炸~ 吃了五次 penalty, 总时间超过比赛长度
https://i.imgur.com/vosM489.png
(因为时间超过比赛长度所以更新完之后应该会更烂)
1. Find the Array Concatenation Value
照他说的做,用内建整数字串互转的语言会写比较快
2. Count the Number of Fair Pairs
不知道是不是我哪里想错了,
比我想像中的第二题要难
我的作法是
sort 过后,对每一个元素 x
用 lower_bound / upper_bound 找出在 [lower - x, upper - x] 的个数
如果自己在里面的话要减一
最后因为每个 pair 会算到两次所以要除二
3. Substring XOR Queries
其实就是对每个 query_i = [first_i, second_i]
找出有没有 substring 是 first_i ^ second_i
因为 <= 10**9 所以只须考虑长度 <= 32 的即可
把 s 的所有长度 <= 32 的 substring 加入 map
要注意优先级,只有最左侧的要加入
像是 s = '1111' 就会有
map = {1: [0, 0], 3: [0, 1], 7: [0, 2], 15: [0, 3]}
没考虑到 0 吃了一次 penalty
想成长度 <= 10 而不是 32 又吃了一次
4. Subsequence With the Minimum Score
又是一个花了一堆时间 debug 的题目
首先,可以发现,因为只考虑最左及最右
所以把 [left, right] 内的全删了 score 还是一样
所以其实是在问删除最短的区间 [left, right] 能让 t 合法
也等于是选一个 t 的 prefix 及 suffix 合起来合法(不能重叠)
首先建出 L, R, 其中
L[i] = 能使 t[0:i] 是 s[:j] 的 subsequence 的最小 j
R[i] = 能使 t[i:] 是 s[j:] 的 subsequence 的最大 j
对于某个 prefix: t[0:i]
我们要找出最小的 j 使得 i < j 且 L[i] < R[j]
因为有单调性所以可以用 sliding window / two-pointer 来做