AtCoder Beginner Contest 141

[TOC]

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{2^y} \right\rfloor$

思路:
考虑$\left\lfloor \frac \right\rfloor = \left\lfloor \frac{\left\lfloor n / a \right\rfloor} \right\rfloor$,然后用堆贪心即可。

###E - Who Says a Pun?

题意:
给出一个字符串$S$,询问出现两次或以上(不能重叠)的子串的最大长度。

思路:
后缀自动机维护每个结点的最早出现的位置和最晚出现的位置。

###F - Xor Sum 3

题意:
给出$n$个数$a_i$,现在要将这些数分成两堆,使得两堆的异或和相加最大。

思路:
考虑所有数的异或和,那么如果某一位二进制位上该为的数量为奇数个,那么不管这些数怎么分,这一位上总是有一堆是$1$,另一堆是$0$。
那么剩下的都是二进制位上数量为偶数的,那么容易发现两堆数在这一位上的值是一样的,那么直接插入线性基的时候忽略掉数量为奇数的位,然后线性空间中找最大值即可。

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