Description
题目链接:BZOJ 3668
在深邃的太平洋海底中,出现了一条名为 drd 的巨龙。历经千辛万苦,atm 终于来到了 drd 所在的地方,准备与其展开艰苦卓绝的战斗。drd 的防御战线由 $n$ 扇防御门组成。每扇防御门包括一个运算 $op$ 和一个参数 $t$,其中运算一定是 $\text{OR},\text{XOR},\text{AND}$ 中的一种,参数则一定为非负整数。如果还未通过防御门时攻击力为 $x$,则其通过这扇防御门后攻击力将变为 $x\ op\ t$($x$ 和 $t$ 经过 $op$ 运算后的结果)。最终 drd 受到的伤害为对方初始攻击力 $x$ 依次经过所有 $n$ 扇防御门后转变得到的攻击力。
由于 atm 水平有限,他的初始攻击力只能为 $0$ 到 $m$ 之间的一个整数。为了节省体力,他希望通过选择合适的初始攻击力使得他的攻击能让 drd 受到最大的伤害,请你帮他计算一下,他的一次攻击最多能使 drd 受到多少伤害。
数据范围:$2\le n\le 10^5$,$2\le m\le 10^9$,$0\le t\le 10^9$
Solution
对于这种二进制的题目,由于每一位时完全独立的,所以第一感觉就是按位贪心!我们贪心 $m$ 的每一位的值,选择能够使答案的这一位最大的值就行了。
细节的处理:我们使用 $\text{DFS}$ 就行实现,这样可以方便处理贴紧上界的情况。如果对于 $m$ 这一位的所有取值,答案的这一位都相同,那么最小化 $m$。
时间复杂度:$O(n\log m)$
Code
1 |
|