AtCoder Beginner Contest 141
Contest Info
[Practice Link](https://atcoder.jp/contests/abc141/tasks)
Solved | A | B | C | D | E | F |
---|---|---|---|---|---|---|
6/6 | O | O | O | Ø | O | Ø |
- O 在比赛中通过
- Ø 赛后通过
- ! 尝试了但是失败了
- - 没有尝试
Solutions
D - Powerful Discount Tickets
题意:
有\(n\)个物品,\(m\)张优惠券,每个物品价格为\(a_i\)。
现在要买下所有物品,对一个物品使用\(y\)张优惠券,可以使其价格变为\(\left\lfloor \frac{a_i}{2^y} \right\rfloor\)
思路:
考虑\(\left\lfloor \frac{n}{ab} \right\rfloor = \left\lfloor \frac{\left\lfloor n / a \right\rfloor}{b} \right\rfloor\),然后用堆贪心即可。
E - Who Says a Pun?
题意:
给出一个字符串\(S\),询问出现两次或以上(不能重叠)的子串的最大长度。
思路:
后缀自动机维护每个结点的最早出现的位置和最晚出现的位置。
F - Xor Sum 3
题意:
给出\(n\)个数\(a_i\),现在要将这些数分成两堆,使得两堆的异或和相加最大。
思路:
考虑所有数的异或和,那么如果某一位二进制位上该为的数量为奇数个,那么不管这些数怎么分,这一位上总是有一堆是\(1\),另一堆是\(0\)。
那么剩下的都是二进制位上数量为偶数的,那么容易发现两堆数在这一位上的值是一样的,那么直接插入线性基的时候忽略掉数量为奇数的位,然后线性空间中找最大值即可。