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\)
那么剩下的都是二进制位上数量为偶数的,那么容易发现两堆数在这一位上的值是一样的,那么直接插入线性基的时候忽略掉数量为奇数的位,然后线性空间中找最大值即可。

posted @ 2019-09-16 10:16  Dup4  阅读(351)  评论(0编辑  收藏  举报