题解
传输数据
可以看出,第 i
秒时,有数据的电脑的数量是 (k+1)^i
,于是我们暴力枚举 i
,找到最小的使得 (k+1)^i >=n
的 i
,时间复杂度:O(\log_{k+1}{n})
数字游戏
令f[x]
表示将 x
变成 1
的方案数,则有:
f[n]=\sum_{d|n,d>1}f[\frac{n}{d}]
我们对于每个 d
去枚举 n
,使得 d|n,d<n
,然后让 f[n]+=f[d]
这样复杂度是 \sum_{i=1}^{n}\frac{n}{i}=O(n\log{n})
跳石头
设 f[x]
表示跳到第 i
个石头需要至少几步
则有 f[x]=1+min(f[x-1],f[pre[x]])
其中 pre[x]
表示前面第一个和他同色的是第几个石头
其中 pre[x]
我们可以扫一遍得出:枚举 i=1..n
,开一个数组tmp[x]
表示 c[1..i]
中 x
最后一次出现是在哪个下标。
然后令 pre[i]=tmp[c[i]]
即可
时间复杂度:O(n)
道路建设
可以发现:一开始只有树上距离小于等于 1 的点对 (x,y)
之间有道路
然后第 1 个阶段后,所有树上距离小于等于 2
的点对 (x,y)
之间也有道路了
同理,第 i
个阶段后,所有树上距离小于等于 2^i
的点对 (x,y)
之间都有道路了
于是我们只需要求出树的直径的长度 d
,暴力求出几个阶段后有2^i>=d
时间复杂度:O(n)