感觉数学题略多.
F 题解太长了..告辞..
A. Minimizing the String
水签到。
1 |
|
B. Math
题意
给你一个数字 n,两个操作:乘上任意一个数;开根号(要求是平方数)
问最小能得到的数字是多少,至少几次操作
分析
先上唯一分解定理,最小能得到的数字一定是 n 的所有质因子乘积。
最小次数可按每个质因子分开讨论,因为开根号即为质因子个数除以 2,故先把质因子个数加成二的幂再不断除。
1 |
|
C. Banh-mi
题意
先给你一个01串,有 q 个区间询问
操作是先在区间内选一个位置,然后把它吃掉,得到那个位置的得分,并且区间内剩余位置的得分全部加上那个位置的得分
每次询问问该区间所能得到的最大的分是多少
分析
先吃大的再吃小的最优,由于只有 0 和 1 ,就先吃 1 再吃 0
每个位置对答案的贡献可单独计算,即 1011 可看作
1000:1+1+2+4 = 2^3
100:1+1+2 = 2^2
10:1+1 = 2^1
这是第一组样例,所以很明白了。
1 |
|
D. Fun with Integers
题意
绝对值小于 n 的数字(除了0,1,-1),让每个数字与其倍数(除去 -1)连边,边权是两者之商的绝对值,问每条边限走一遍能得到的最大权值和是多少
分析
由于每个点度数都是偶数,故存在欧拉回路。所以每个连通分量里的每条边都能访问到。
实际上根据题解的证明(图中每条边都在同一个连通分量内)可以写出 这样 复杂度$O(\sqrt{n})$的代码。
1 |
|
E. Company
题意
给定一棵有根树,q 个区间询问。
对于每个询问,要求区间内删去一个点后剩余点的 LCA 的深度,问删哪个点,深度最大多少
分析
没记错的话去年多校训练碰到过类似题目。
先对每个点求 DFS 序,由于所有点的 LCA 的 DFS 序的作用域一定是恰好包含所有点的 DFS 序,即这些点的 LCA 即为 DFS 序最小的和最大的两个点的 LCA 。
故删掉的一定是 DFS 序最小的点或者最大的点。
倍增求 LCA + ST 表,复杂度$O(nlogn)$
1 |
|