考试题题解

solution

主讲人 IGL ALBL
试题 T2 T3 T1 T4 T5

现世,暗险

暴力:dfs所有路径,在使用clock的情况下预计\(\text{50'}\)

题意:给你一张有向图,距离为 \(\text{2}\) 的正整数次幂的两点间可以重新连一条长为 \(\text{1}\) 边,求在此情况下的从起点到终点最短路。

我们用 \(\text{f[i][j][o]}\) 表示点 \(\text{i}\) 到点 \(\text{j}\) 之间是否存在长为 \(\large 2^o\) 的边。有为真,否则为假。显然如果 \(\text{f[i][k][o - 1] = f[k][j][o - 1] = 1}\),那 \(\text{f[i][j][o] = 1}\)。预处理原图中相连的点为 \(\text{f[i][j][0] = 1}\)。用 \(\text{dis[i][j]}\) 表示两点间的最短距离,预处理原图中相连的点距离为 \(\text{1}\),不相连的赋最大值。

然后倍增处理连新边,最后跑最短路即可。

数据这么小,\(\text{Floyd}\) 可以了。


夜魇,如一

1.暴力

​ 考虑暴力枚举,第一维枚举希儿追杀的时间点,第二维枚举追杀谁,直接模拟即可,\(\text{O(n^2m)}\),预计得分\(\text{40'}\)

2.正解

​ 仔细观察,我们可以发现一些性质:我们设上帝的一次追杀事件为 \(\text{(0, x)}\),我们可以得到一个小结论:

对于 \(\text{x}\ne \text{u}_\text{i}\),则这个事件插入在 \(\text{i}\) 之前还是之后都是等价的,需要的话口胡证明。

​ 因此,我们可以尝试在每一个事件前插入 \((0,u_i)\) 之后直接暴力模拟,模拟一次的复杂度为 \(\text{O(n)}\),这题还有一个点—— \(\text n\ge\text m\),所以很容易想到当追杀无效直接跳过,则至多进行 \(\text{3m-1}\) 次,复杂度\(\text{O(nm)}\)


薪炎,燎原

这题暴力的话就嗯DFS预计得分\(\text{10'}\)

​ 这是一道恨不得拍到你脸上告诉你“这是四维偏序板子”的一道题,具体实现就是 \(\text{CDQ}\)\(\text{CDQ}\) , 复杂度 \(\text{O(nlog}^3\text{n)}\),用\(\text{KDT}\) 的话会更快(但是我不会呵呵呵)

​ 然后因为我自己的原因我的 \(\text{CDQ}\) 跑了\(\text{2.5s}\)(不会有暴力过了吧)


镜缘

blog

一切开始之前,我们先推导一个引理:

\[\large{ f(n)=\sum_{i=0}^ni^2,n\ge0\\ f(n)=\frac{n(n+1)(2n+1)}{6} } \]

这里提供五种推导它的方法。

一、查找法

通过搜索引擎,题解,文献等,我们找到了这个公式:

\[\large f(n)=\frac{n(n+1)(2n+1)}{6} \]

[doge]

二、归纳法

\[\large \begin{aligned} &f(n)=\frac{n(n+1)(2n+1)}{6}\\\ &=\frac{n(n+1)(n+\frac{1}{2})}{3}\\ &\\ &f(0)=0\\ &f(n)=f(n-1)+n^2\\ &3f(n)=(n-1)n(n-\frac{1}{2})+3n^2\\ &=(n^3-\frac{3}{2}n+\frac{1}{2}n)+3n^2\\ &=n^3+\frac{3}{2}n^2+\frac{1}{2}n\\ &=n(n+\frac{1}{2})(n+1)\\ &\text{故对于所有的}n\ge0,f(n)=\frac{n(n+1)(2n+1)}{6} \end{aligned} \]

三、二重合式展开与收缩

\[\large \begin{aligned} &f(n)=\sum_{k=1}^nk^2\\ &=\sum_{j=1}^n\sum_{k=j}^nk\\ &=\sum_{j=1}^n\frac{j+n}{2}(n-j+1)\\ &=\frac{1}{2}\sum_{j=1}^n(n(n+1)+j-j^2)\\ &=\frac{1}{2}n^2(n+1)+\frac{1}{4}n(n+1)-\frac{1}{2}f(n)\\ &=\frac{1}{2}n(n+\frac{1}{2})(n+1)-\frac{1}{2}f(n)\\ &\\ &\frac{3}{2}f(n)=\frac{1}{2}n(n+\frac{1}{2})(n+1)\\ &f(n)=\frac{n(n+1)(2n+1)}{6} \end{aligned} \]

\(\sum_{k=1}^nk^2=\sum_{j=1}^n\sum_{k=j}^nk\) 的解释:

我们知道,一个数 \(n\) 加和 \(n\) 次,就是 \(n^2\)

将右式展开:

1+2+3+4+5+6+...+n
  2+3+4+5+6+...+n
    3+4+5+6+...+n
      4+5+6+...+n
        5+6+...+n
          6+...+n
          	...
          	...+n

刚好每个数 \(k\)\(k\) 次,与原式等价。

四、瞎搞法

利用恒等式 \(\large(n+1)^3=n^3+3n^2+3n+1\),可以得到:

\[\large \begin{aligned} &(n+1)^3-n^3=3n^2+3n+1\\ &n^3-(n-1)^3=3(n-1)^2+3(n-1)+1\\ &\cdots\cdots\\ &2^3-1^3=3*(1^2)+3*1+1 \end{aligned} \]

把这 \(\large n\) 个等式两端分别相加,得:

\[\large(n+1)^3-1=3\times\frac{n(n+1)}{2}+n+3\sum_{i=1}^ni^2\\ \large n^3+3n^2+3n=3\times\frac{n(n+1)}{2}+n+3\sum_{i=1}^ni^2\\ \]

整理后得:

\[\large\sum_{i=1}^ni^2=\frac{n(n+1)(2n+1)}{6} \]

五、扰动法

这是最实用的方法。

对于 \(f(n+1)\) ,抽出 \((n+1)^2,0^2\)

\[\large \begin{aligned} &f(n)+(n+1)^2\\ &=\sum_{k=0}^n(k+1)^2\\ &=\sum_{k=0}^n(k^2+2k+1)\\ &=\sum_{k=0}^nk^2+2\sum_{k=0}^nk+\sum_{k=0}^n1\\ &=f(n)+2\sum_{k=0}^nk+(n+1)\\ &\\ &\sum_{k=0}^nk=\frac{1}{2}((n+1)^2-(n+1))=\frac{n(n+1)}{2} \end{aligned} \]

额。。。有个毛用?

等等,二次幂可以推出一次幂求和,那是不是三次幂可以推出二次幂求和?

\[\large g(n)=\sum_{k=0}^nk^3 \]

\(g(n)\) 中抽出 \((n+1)^3, 0^3\)

\[\large \begin{aligned} &g(n)+(n+1)^3\\ &=\sum_{k=0}^n(k+1)^3\\ &=\sum_{k=0}^n(k^3+3k^2+3k+1)\\ &=\sum_{k=0}^nk^3+3\sum_{k=0}^nk^2+3\sum_{k=0}^nk+\sum_{k=0}^n1\\ &=g(n)+3f(n)+\frac{3n(n+1)}{2}+(n+1)\\ &\\ &3f(n)=(n+1)^3-\frac{3n(n+1)}{2}-(n+1)\\ &=n^3+3n^2+3n+1-\frac{3n^2+3n}{2}-n-1\\ &=n^3+\frac{3n^2}{2}+\frac{n}{2}\\ &=(n+1)(n+\frac{1}{2})n\\ &\\ &f(n)=\frac{n(n+1)(n+\frac{1}{2})}{3} \end{aligned} \]

通过此方法,我们可以从 \(n+1\) 次幂推出 \(n\) 次幂!!!

好,接下来回归题目:

\(1\)\(\sqrt{R}\) 枚举 \(x\),那 \(y\) 的最大值为 \(\sqrt{R-x^2}\),因为再大会超出这个圆。

当然 \(y\) 向下取整。

\(\large x\) 的贡献总和为 \(\large x^2y\)\(\large y\) 的贡献总和为 \(\large\frac{y(y+1)(2y+1)}{6}\)

相加即可。


廊中燥

推销 blog

先给结论:

\[\large \sum_{k\in S(m,n)}\varphi(k)=m\times n \]

首先思考判定条件 \(\text{n mod k + m mod k}\ge\text{k}\) 的等价判定式。

\(mod\) 有关的,除法?除法与向下取整结合,会有:

\[\large\lfloor\frac{(n+m)}{k}\rfloor-\lfloor\frac{n}{k}\rfloor-\lfloor\frac{m}{k}\rfloor \]

这个式子与原判定式等价。

那么再看这个合式,既然有了新的判定式,那么这个式子也该找个等价式。

发现 \(S(m,n)\) 其实就是在 \(1\)\(m+n\) 个数里筛掉一些数,

也就是:

\[\large\sum_{k=1}^{m+n}\varphi(k)\lfloor\frac{m+n}{k}\rfloor-\sum_{k=1}^n\varphi(k)\lfloor\frac{n}{d}\rfloor-\sum_{k=1}^m\varphi(k)\lfloor\frac{m}{d}\rfloor \]

接下来考虑如何计算这个冗长的式子。

暴力枚举肯定不行。

发现这个长式子可以分成三截,算其中一截就行。

我们先从中拉出来一截转换一下:

\[\large\lfloor\frac{n}{k}\rfloor=\sum_{i=1}^n[d\mid i] \]

带入其中那部分式子

\[\large \begin{aligned} &\sum_{k=1}^n\varphi(k)\lfloor\frac{n}{d}\rfloor\\ &=\sum_{k=1}^n\varphi(k)\sum_{j=1}^n[k\mid j]\\ &=\sum_{j=1}^n\sum_{k=1}^j[k\mid j]\varphi(k)\\ &=\sum_{j=1}^n\sum_{k\mid j}\varphi(k)\\ &=\sum_{j=1}^nj\\ &=\frac{n(n+1)}{2} \end{aligned} \]

答案显而易见了,

\[\large \begin{aligned} &\frac{(m+n)(m+n+1)}{2}-\frac{n(n+1)}{2}-\frac{m(m+1)}{2}\\ &=m\times n \end{aligned} \]

posted @ 2021-09-28 16:03  I_got_light  阅读(26)  评论(0)    收藏  举报