1. X or What?
1.1 题目链接
[Kickstart Round D 2019 A. X or What?]
1.2 题意描述
1.3 解题思路
xor-even
是指在二进制表示中,1的个数为偶数。
可以发现:两个数的异或和是不是 xor-even
跟这两个数本身是不是 xor-even
有关。换言之,如果两个数都有偶数个1或者都有奇数个1,那么他们异或和的二进制表示一定是偶数个1;当一个数有偶数个1,另一个数有奇数个1,那么异或和的二进制表示中一定是奇数个1。
所以,只需要维护 最左、最右的二进制表示中有奇数个1的数。
1.4 参考代码
1 |
|
2. Latest Guests
2.1 题目链接
[Kickstart Round D 2019 B. Latest Guests]
2.2 题意描述
2.3 解题思路
题目中,每个位置都只能记住最后一次被访问的客人(们)。
先求出每个客人,在 $M$ 时刻会到达哪个位置,然后从终点往起点移动,就可以把问题转化为每个位置只记住最先访问的客人。然后一次BFS,就可以求出每个位置最先被谁访问了。
2.4 参考代码
1 |
|
3. Foot Stalls
3.1 题目链接
[Kickstart Round D 2019 C. Foot Stalls]
3.2 题意描述
3.3 解题思路
假设 $x_0$ 表示 warehouse 的位置,$x_1\sim x_K$表示 $K$ 个 stalls 的位置。那么,题意就是求:
$$\begin{align}
\min \left\lbrace C_{x_0}+\sum\limits_{1\le i\le K}(C_{x_i}+\lvert x_i-x_0\rvert)\right\rbrace
\end{align}$$
warehouse 的位置一定是 $K+1$ 个数的中位数。(证明简单。可以假设给定了 $K+1$ 个位置,现在需要确定 warehouse 的位置,使得花费最小。)
在 warehouse 左边的 $stall_i$ 对答案贡献为 $C_{x_i}-x_i$, 在 warehouse 右边的 $stall_i$ 对答案的贡献为 $C_{x_i}+x_i$。
现在按照坐标位置来枚举 warehouse,根据贡献的大小,用最大堆/优先队列维护左边 $\frac{K}{2}$ 个数,用有序数组维护右边 $\frac{K}{2}$ 个数,分别求出左边、右边最小的 $\frac{K}{2}$ 个数之和。
细节繁琐,详情见代码
3.4 参考代码
1 |
|