牛客训练赛115题解
很抱歉由于出题人的懈怠,题目难度可能与顺序稍有不符。
但还是希望大家喜欢这些题目!
(好像通过率就没几个题达标,寄寄子)
A Mountain sequence
我们从大到小考虑每个数放在序列里的方案数,相同值的数一起考虑。
首先,所有的最大值都会放在中间;
接着我们考虑第二大的值,假设出现了 次,那我们应该有
种方式放置这些数。
比如原序列是[2],插入两个1,那么就有[1,1,2],[1,2,1],[2,1,1],即在外面包裹一层。
以此类推。
因此答案就是 非最大值的数的出现次数+1的乘积。
复杂度 ,取决于排序实现。
花絮:本来是没有这个题的,但是审题人嫌原来的B题太难了,于是把本场的B题(原来的A题)往后移了一个位置,加了这个题。
B Antiamuny wants to leaern binary search again
考虑每次二分过程在[l,mid-1],[mid+1,r]这两个区间一定取更长的区间,因此每次都选择[mid+1,r]这个区间就可以了。
如果走不到=k的位置就说明无解。
复杂度
C Find the maximum slope
根据拉格朗日中值定理,非常显然的,问题等价于求最大的,。
因此直接差分维护就可以了,等价于单点修改,全局最大值,拿set维护即可。
复杂度 。
花絮:本来CSL只出了输出最大斜率的版本,我加了一个区间加^_^
D Genealogy in the trees
一个可行的做法是,dfs一整颗树;
在dfs到一个 时,在
的点位置上贡献+1。
在dfs到一个 时,对
这个子树求有多少贡献。
在dfs完 这颗子树时,减去
这个点的贡献。
对于上述操作,我们只要预处理出dfs序,实现一个单点加区间求和即可完成。
复杂度 。
一些代码写了复杂的数据结构,常数不是巨大应该都可以通过。
E High contrast pattern
这题一定有一万种做法,这里介绍一下出题人的做法和贴一下Heltion老师的代码(带注释,蟹蟹hls)。
首先 时必定有解,构造显然。
时,
时无解,这也显然(样例都给你了!)。
剩下全都有解,因为构造的出来。
出题人的做法:
我们先给出一个 的矩阵
00000
00000
00000
我们填充一下
10000
00000
10000
这样子,我们就完成了k=[1,3]的方案。
我们再填充一下:
10300
02000
10400
数字表示按顺序把这几个位置填充1,可以发现,按照这个操作,我们完成了3,5,7,9,的方案实现。
我们这样只实现了奇数,但是我们可以在最右边开始增加一个1,这样子我们就可以实现偶数了。
然而这样依然是有一些问题的,会有一些特别情况无法处理(比如填最后一列就不是+2了)
那么我们对这些情况进行特殊处理,显然这些情况应该是 左右的情况,总之
应该蛮大的。
我们还是回到 ,现在我们先填满(
):
23101
01010
10101
其中2应该填1,3应该填0.
我们考虑2这个位置,如果我们把他改成0,那么连通块数量-2,如果改3这个位置,那么连通块数量-3。
所以,我们对上面的情况用这些边角料调整一下,就可以轻松构造出这些情况。
复杂度为 。
Hls的做法:
hls写注释了,我直接贴代码了。
Jewel maximizing magic
首先问题等价于在 个数里选出
(
未知) 个数异或起来的最大值,通过打表、数学归纳法、画图推导等方法,我们可以得到:
n%3=1,k%3=0
n%3=2,k%3=2
n%3=0,k%3=1
因此我们可以设一个dp[选的数数量%3][异或得到的值]这样子的一个dp,正常转移即可。
复杂度 ,
为值域。