前言
划水打了这场比赛,感觉签到题稍有点多,^_^,整体做起来挺舒服的。
欢迎关注
A. 宇宙万法的那个源头
式子可以拆为 11145 * (10^5x + 10^(5x - 5) + ... + 10^5 + 1)
所以质数一定小于11145,然后巴拉巴拉一顿分析....
回到正题,因为3是11145的因子,且这个数是奇数
所以3就是天选之子。
B. 小苯的台灯
如果模数较小,那么一定存在循环节(I题 带猫猫任务也涉及这块)。
所以模拟就行了,因为存在较小的循环节。
C. 小苯的排列构造
可以把 2 4 1 3 作为内核
然后n > 4按奇偶在两边拓展
大概是这样子 2n - 1, 2n - 3, ..., 9, 7, 5, || 2, 4, 1, 3, || 6, 8, 10, ..., 2n - 2, 2n
当n<4时,不存在这样的序列。
D. 408之计算机网络
模拟题, 可以把ip地址转换为一个32位整数,C语言中有个类型,叫做union,感觉可以简化不少。
这边的思路,是拆位统计,如果所有的ip在i位都相等,则属于CIDR前缀。
属于简单,但是写起来稍头痛。
E. 小苯的连续因子
本质是区间LCM(最小公倍数)最小。
要区间lcm最小,那[l, r]一定是[1, k],这样时间复杂度为
但是这个需要高精度支持,涉及高精度后,时间复杂度远比之前的高很多了。
那如何求解呢? 至少持平O(nlogn), 甚至O(n)
其实是小于等于k的所有质数(带次数)的乘积,这样就能减少时间复杂度。
欧拉筛, 枚举质数及其指数(质数总个数为), 因此感觉整体接近
埃式筛也可以过,并没有卡时间复杂度,卡的是直接lcm,因为高精度代价大。
F. 小苯选择队友
分组 + 前缀和预处理 + 滑窗
分组是为了枚举战队,然后模型就转变为
寻求数组中最大的子数组和
这就是经典问题了,DP/双指针都可以。
G. 轻舟已过万重山
防AK题,忽视
H. 小红的字符串构造
防AK题,忽视
I. 小苯的带猫猫任务
0-1背包的裸题
每个猫都是独立的,难点在于如何确定猫的最小代价
pos - left * x + right * y = 0 % like
这边有两种方式,至少我这边想到的。
- exgcd,求得xy的组合, 保留最小的px+qy
- 预处理right的循环节(like<=3000), 然后枚举left的x值, O(n)代价求得最小的px+qy
所以整体上,
J. 408之数据结构
使用了“珂朵莉树”
我对这个数据结构定义有点模糊
大概的意思,
- 使用set
- key为区间
- set内区间不存在重叠
因为set(java的treeset)支持lower_bound/upper_bound,所以添加和查询相对容易,满足mex操作即可。
当然这题也可以借助
- 链式并查集
瞄了下官解,好像解法更优,用set存 不存在的数,如果添加就remove,查询就是find first.
K. 小苯的矩阵
LIS的变体
同列的值只能取一个,所以难点其实在这里
如何规避这个问题,可以对同列从大到小进行遍历,然后进行常规的LIS操作
这样就可以得到解了。
从大到小,这个trick技巧,完美避免干扰。
官解说,灵感来自某一场力扣周赛,其实那题我印象很深,为啥呢?因为那题我看错题了,看错的题意就是这个题的弱化版,T_T.
L. 小苯的异或疑惑(easy)
和M一起讲
M. 小苯的异或疑惑(hard)
异或的技巧,因为每个值,参与次数 n - 1次
如果n-1为偶数,那结果一定为0
如果n-1位奇数,那每个值参与异或一次
所以最终结果为 数组整体的异或和。
N. 中华文化,博大精深!
原神,启动!