省选模拟53 题解

A. 数(number)

对于 $n$ 为偶数,容易发现确定一半就行了,答案为 $10^{\frac{n}{2}}$。

对于 $n$ 为奇数,列式子可以发现形如 $\sum 2x_i = \sum 2y_i \ \ +y_{mid}$。

一步很神的操作是,把 $y_i$ 转化为 $9-y_i$,于是可以提到左侧。

原式转化为 $\sum 2x_i + \sum 2y_i=9k+y_{mid}$ ,枚举 $y_{mid}$ 的取值,于是是一个插板法+二项式反演。

 

B. 序列(sequence)

可以考虑首先构造出最优策略的代价。

显然可以对奇数和偶数分别考虑,于是发现代价就是把每个奇数权值按照先后顺序依次分配到每个奇数位置上。

考虑怎样的操作,可以使总代价不变的前提下,字典序更小。

可以发现这样的操作就是两个移动区间有交集的数更换了目的地。

不妨给每个奇数确定一个移动的方向,发现有交集其实一定意味着移动方向相同。

于是分别考虑每个移动方向相同的连通块。

如果奇数都向左指,每次都是一个奇数位置选择最小的合法的奇数。

可以转化为一个括号匹配问题,即依次对每个左括号次选择最优的合法的右括号。

然后发现合法的右括号位置显然是一个连续区间,所以二分答案然后用线段树维护括号序列匹配数来支持查询就好了。

对于奇数都向右指,直接搞个堆不断维护最小值即可。

对于指向自己,选择是唯一的,即不进行移动。

这样的复杂度是两个 $log$ 的。

一个很神仙的做法是,对于奇数向左指的情况。

反向建一个堆,每次遇到一个位置都取出堆中最大的元素。

 

C. 烤仓鼠(hamster)

posted @ 2020-03-25 21:37  skyh  阅读(146)  评论(0编辑  收藏  举报