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}
\]