牛客练习赛52 题解
A. 数数
送温暖题。
只需要掌握基础的交换求和号的知识就能解决这题。
交换的原则:\bf{交换前后多项式的每一项不变。
那么便可以顺理成章的推出来了:
的交换也是一样的。类比上面的做法不难推出。和
比较不同的地方就是变化的地方多是指数。
其实手动展开一下或者打个表也很容易就能看出来的。
时间复杂度。
B.Galahad
解法1:codesonic
将询问离线,维护一个初始全为的序列
,从
遍历到
,对于每个
,记录下上一次出现的位置
,遍历到
时,对
序列的
到
进行区间加
,并且处理询问的右端点为
的询问,设该询问的左端点为
,即输出当前
的值,树状数组即可解决。
解法2:wjyyy
同样将询问离线,按右端点从小到大排序。建立树状数组,维护贡献的前缀和。
由于权值满足
,所以不用离散化,直接维护
表示元素
上一次出现的位置。
设当前更新到的位置为。如果
没有出现过,即
,则不产生影响;否则把树状数组上的
贡献变为
,在
位置贡献
。
增大,依次更新。直到
抵达当前询问的右端点
。
时间复杂度
C.烹饪
写这道题的人应该都见过并用过 gcd 这个东西。
介绍一个与 gcd 有关的一个定理,裴蜀定理,内容就是:形如的不定方程有解的条件就是
。
这个定理推广到任意多个未知数也是成立的。
考虑题目求的是什么
挑选出 种 食材
,让他们能够组合出任意正整数的美味值。
其实就是一个 任意正整数的不定方程!
任意正整数都有的 gcd 是 1。
所以这个问题就变成了挑选若干个数,让他们的 gcd 为 1。
这个问题可以用 来解决。
设 表示前
个数的 gcd 为
的方案数。
不难推出转移方程:
最终 就是答案。
D.粉丝群
拿到这个题可以先考虑手动构造,但是发现有很多都是不满足的。所以可以打表。
打表发现当 为偶数时,仅有无序集
满足条件,按照字典序排列分别是
在第
个位置,
在第
个位置,
,
在第
个位置,共
组。因为是奇数
个
和
个
的异或,第二问可以直接输出
。
当 为奇数时,有上述无序集以及长为
的集合
满足条件。因此共
组答案,而这个集合是比有序集
小的,所以排在字典序第
小。
特判 的情况下只有 1 组
满足条件(这组数据是 wjyyy 后来加的)
下证有且仅有这两种情况。
设 是一个满足条件的数列,对于
,考虑下面的
个 数
其中 。
因为 不能分成和相等的两部分数,那么其中肯定没有若干个数的和为
。
因此,数列 (1) 中除了 和
,其余任意两项模
意义下不同余(项数多的减去项数少的,所得差等于
),而数列 (1) 中有
个数,其中必定有两个数模
同余,所以
,这个对任意
都成立。
所以有
又因为他们的和是 ,所以
或
。
所以,只有数列 和
(
为奇数)满足要求。
E.魔法少女
简单 DP。
因为 一定在
和
之内,所以只要第 1 列和第
列向下走能走到同一列,那么全部物体都会落到同一列(所以魔法装置可以认为是一个“合并器”)。
那么只要第 1 列和第 列能走到同一列里,就收集成功了,那么,除了最后一个魔法装置,其他的魔法装置都不可能同时对不同的两列产生作用。
考虑 DP,设 ,为rainy从第一列向下走到第
列的花费,
为rainy从第
列走到第
列的花费,其中
, 其他都为 inf,每一行就把
到
中的最小值加上
,来更新
。
同理。
因为每行只有一个魔法装置,所以状态不会互相影响, 和
也不会互相影响。
显然可以用线段树等数据结构来维护区间最值和单点修改。
F.发传单
考虑到传单的传递类似于网络流中的流量传递,尝试使用网络流算法解决此题。但出题人比较菜,她不知道有没有跑一次网络流的做法,所以这里只会讲两次网络流的做法。
题目要求每个点被流量流经至少一次,因此直接考虑上下界网络流的建模。
首先对原图不考虑费用的情况下使用上下界最小流的做法计算出最少的流量。
之后要做的就是在已知最少的流量的情况下求出最少的花费。
再考虑上下界最小费用可行流的建模,同时在原图上建立另一个源点,向原图源点连边,流量上下界均为前一问求出的最小流量,然后跑就行了。
全部评论
(1) 回帖