【SCOI2016】Day2初略题解
$\ \ \ \ \ \,$做一套省选题来练练手(Day2)。
【T1 妖怪】
解法
$\ \ \ \ \ \,$ 对于一个妖怪的两个属性,为了方便我们把它定义为 $x$,$y$,而要求的一个妖怪的战斗力应该为:
$(\frac{b}{a}+1)x+(\frac{a}{b}+1)y$
$\ \ \ \ \ \,$ 既:
$\frac{b}{a}x+\frac{a}{b}y+x+y$
$\ \ \ \ \ \,$ 由于 $x$,$y$ 已经确定,所以我们需要找的是 $\frac{b}{a}x+\frac{a}{b}y$ 最大的最小。
$\ \ \ \ \ \,$容易得到这是个对勾函数,对于一个怪物,当$\frac{b}{a}=\sqrt{\frac{y}{x}}$ 时,战斗力最小。
$\ \ \ \ \ \,$所以我们以 $x$,$y$ 为横纵坐标做个上凸壳,那么答案就一定是在凸壳上面,就会存在下面两种情况:
- 在点上:$\frac{b}{a}=\sqrt{\frac{y}{x}}$
- 在边上:需要满足:
$(\frac{b}{a}+1)x_1+(\frac{a}{b}+1)y_1=(\frac{b}{a}+1)x_2+(\frac{a}{b}+1)y_2$
解得:$\frac{b}{a}=\frac{y_1-y_2}{x_2-x_1}$
$\ \ \ \ \ \,$就这样扫一遍过去就行了,复杂度 $O(n \log n)$。
代码
1 |
|
【T2 美味】
解法
$\ \ \ \ \ \,$又是异或最大呢,不是线性基就是贪心了,day1才搞了线性基,可以排除,我们看看怎么贪心。
$\ \ \ \ \ \,$首先可以看到他有一个取值范围的限制,我们可以用到可持久化数据结构维护。
$\ \ \ \ \ \,$然后我们可以贪心地想,从高位到低为维护 $a_i$ 的存在性。这个可持久化数据结构需要满足下面的操作:
- 插入一个数;
- 删除一个数;
- 统计某个取值范围的数数量是多少。
$\ \ \ \ \ \,$我最后选择了权值主席树。
$\ \ \ \ \ \,$现在对于每一次询问,我们贪心一下,从高位到低位枚举,如果$b$这一位为$1$,我们就找 $0$ ,反之找 $1$。
$\ \ \ \ \ \,$怎么找呢?我们令当前找到第$i$位, $ans$ 等于当前最优的 $a_i+x$,那么我们就找当前 $[l,r]$ 范围内,是否存在有数次在区间($1/0$为当前要找的数):
$[ans+(1/0<<i)-x,ans+(1/0<<i)-x+(1<<i)-1]$
$\ \ \ \ \ \,$存在的话就更新$ans$为 $ans+(1/0<<i)$,不然退而求其次,取 $ans+(0/1<<i)$。
$\ \ \ \ \ \,$这样我们可以保证在完成贪心,取到第0位之时,$ans$ 等于最优的 $a_i+x$。(并不关心是哪个$a_i$,反正是拼出来了。
$\ \ \ \ \ \,$复杂度$O(n \log a_{max}+m\log^2 a_{max})$
代码
1 |
|
【T3 围棋】
$\ \ \ \ \ \,$插头dp是不会做插头dp的,这辈子不可能做插头dp的。写起来又怪麻烦,就是打打傻逼暴力,才能骗得了分这样子。
$\ \ \ \ \ \,$(逃