SkyWT

SkyWT

我们的征途是星辰大海

🚧 博客系统即将搬迁,将集成到 skywt.cn/blog。欢迎体验!
📧 现在可以使用邮箱订阅本博客。欢迎订阅!

今天的 XY 题居然是递推专题,五道题目全都是递推,30+个人 AK 了……

递推是按照一定的规律来计算序列中的每个项,通常是通过计算前面的一些项来得出序列中的指定项的值。其思想是把一个复杂的庞大的计算过程转化为简单过程的多次重复,该算法利用了计算机速度快和不知疲倦的机器特点。

More...


据说很多公司都有这样一道面试题:给你几个 G 的字符串,让你想办法快速地找出其中的很多个需要和谐的敏感词。
这个问题里,如果“需要和谐的字符串”称为“模式串”,“待被查的字符串”称为文本串。对于这样的问题,如果暴力做,复杂度就是 $\Theta(N \ast M \ast Len)$……用 AC 自动机这种高级的算法,可以在 $\Theta (N)$ 左右复杂度内得出答案。Excited!

More...


今天遇到一个十分 Dark 的题目,让你求:

$$\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} lcm(i,j)$$

一共 $T$ 组数据,数据范围是:$T \leqslant 2 \ast 10^5, n \leqslant 3\ast 10^6$……

题目链接:LightOJ 1375 LCM Extreme

More...


之前学习了欧拉函数以及几个性质,知道了“欧拉函数 $\varphi(n)$ 是小于或等于 $n$ 的正整数中与 $n$ 互质的数的数目。”对于求解单个的 $\varphi(x)$ 很简单,直接枚举就可以了;但是如果要你在 $\Theta (N)$ 时间复杂度内求 $\varphi(i)$ 的值($i=1,2,\dots,n$),怎么求呢?自然是用欧拉筛了~

More...


在之前我们学过的最朴素的筛法就是埃氏筛法(埃拉托斯特尼筛法),它的复杂度是 $\Theta (N \log_2(N))$。其实这个朴素的筛法可以进行常数上的优化。还有一种更炫酷的筛法:欧拉筛,即线性筛法,时间复杂度为 $\Theta (N)$。

More...


如果告诉你在一个三角形中,$B-A \leqslant c, C-B \leqslant a, C-A \leqslant b$,怎么求 $C-A$ 的最大值呢?通过yy观察可以发现,$C-A$ 的最大值是 $min(a+c,b)$。这个答案如何得出?将这个三角形内的约束条件推广到更多约束条件呢?

More...


在一幅无向图中,如果删除了一个点,导致图分成了两个或多个联通块(强连通分量),那么这个点就是割点。怎么求这样的点呢?最原始暴力的方法就是每次枚举一个点,删除,跑一遍最短路。今天我们可以用更高级的 Tarjan 算法 $ \displaystyle \Theta (N)$ 求解。

More...


Kruscal 算法是求最小生成树的基础算法,很容易求得最小生成树,但是怎么利用这个算法求非严格次小生成树与严格次小生成树呢?

More...


0/1 分数规划是一种常见的模型:给你 n 个价值 $a_i$ 与 n 个代价 $b_i$,让你选出 m 个数字,使得 $ \sum \frac {a_i} {b_i} $ 最大。显然这种题目可以用二分,但是有一种更优秀的方法:Dinkelbach 迭代法。

More...


现在有N个数,分别为1到N,如果要问你这些数的所有排列中,从小到大数的第N个是多少,如何求解?

显然当N很小时直接写个模拟就可以了。但是这样写的时间复杂度至少是$A_N^N$,也就是$N!$,很容易超时。想想$13!$已经是6227020800了……有没有更快的方法呢?

More...