2019 Google Kickstart Round D Solution
A. X or What?
题意大概:给定n个元素的集合A,以及q次修改,询问 每次修改后 满足区间异或后有偶数个位置为1 (xor-even) 的 最大区间是多长。 $N,Q \leq 10^5$
线段树维护下最长区间大小,就ok了,只有2个 xor_even 或2个 xor-odd 才能构成 xor-even .
1 |
|
B. Latest Guests
题意:1个环上有N个大使馆,编号1-n,G个访客从各自起始位置顺时针或逆时针访问大使馆,1分钟访客可以从i移动到i+1/i-1,总共访问M分钟,问每个大使馆最后到达的游客编号集合。 $N,G\leq10^5$, $M\leq 10^9$
解法好多,可以二分来做,这里用的滑动窗口来解决,
先只考虑顺时针的情况,存下来每个访客 的结束点 ,然后对于每个大使馆来说,最后访问他的人一定是从大使馆位置开始顺时针方向的第一个人,并且他们之间距离要小于等于M,这样存下每个人的最终位置,就能O(N)时间处理每个大使馆的最后记录的到达时间,同理逆时针也是这样。有了到达时间很容易反推各个位置上的记录起始点在哪里,之后按顺序统计输出就ok,相同位置相同方向的访客的结果是相同的,当一个人处理。
1 |
|
C. Food Stalls
题意:建K个摊位,1个仓库,有N个候选建造位置$X_i$ ,每个位置的 建造 花费为$C_i$,此外如果仓库建在$X_j$,在$X_i$建造摊位要额外付出$|X_j- X_i|$
先考虑已经选好K+1个位置,那么仓库一定会修在中间位置,所以仓库左边有$\lfloor k/2 \rfloor$个摊位,右边有$k -\lfloor k/2 \rfloor$个摊位,那我们可以枚举仓库所在的位置,找出左右两边代价最小的$\lfloor k/2 \rfloor$和$k -\lfloor k/2 \rfloor$摊位即可。
假设固定仓库为$x_j$,那么左边摊位$x_i$代价为$c_i+x_j-x_i$,其中$x_j$是固定的,所以最大堆来维护左边$c_i-x_i$最小的$\lfloor k/2 \rfloor$个摊位,右边同理,最后每个仓库位置再加上仓库建造费用$C_j$以及$\lfloor k/2 \rfloorx_j-(k-\lfloor k/2 \rfloor)x_j$,求一个最小值就是答案。
1 |
|