P5246 题解
前言
耗时一个晚上,没看题解把消失的源代码切了,很高兴,来写篇题解!
点击 \(\color{red}\textbf{每个子任务的标题}\) 可以查看代码。
如果不想看心路历程,请 \(\color{red}\textbf{划到最底下}\) 看一行流题解。
Task 1
是一堆小写字母,往 exe 里挨个输入 \(\texttt{a}\sim\texttt{z}\) 就能发现这是一个映射。直接做即可。
Task 2
input2.txt
看起来非常简单,但是输进去 \(\text{exe}\) 我就破防了:这是啥啊?????
输入 \(0\sim10\),答案 \(a_i\) 为 \(10, 2030, 8082, 18166, 32282, 50430, 72610, 98822, 129066, 163342, 201650\)。
稍微思考一下就不难了。注意到 \(8082\approx 2030\times 2^2\),\(18166 \approx2030\times 3^2\)。尝试变成整除,于是发现 \(-10\) 就整除了。
\(b_i=\dfrac{a_i-10}{i}\),答案 \(b_i\) 为 \(0, 2020, 4036, 6052, 8068, 10084, 12100, 14116, 16132, 18148, 20164\)。
不看前面几项。我草这是等差数列。差是 \(2016\),很吉祥啊!
所以 \(b_n=2020+2016(n-1)\),\(a_n=n\cdot b_n+10=n(2020+2016(n-1))+10\),输出即可。
很快把公式抄进代码里,和 \(1\sim20\) 的正确答案比一下。????????为啥这正确答案还带突然变小的???????
这并不困难。发现突然变小的那一项和我们的答案正好差 \(233333\),很容易想到是 \(\bmod 233333\) 啦。
Task 3
Task 4
input4.txt
显然是读入一张图。随便输入一点普通图,发现结果总是 \(n^2\),直到你输入了一个不连通的图 \((V=\{1, 2, 3, 4, 5\}, E=\{\small(1, 2), (2, 3), (4, 5)\normalsize\})\),发现答案是 \(13=3^2+2^2\)。这就很显然了,答案即 \(\sum\textbf{连通块的大小}^2\)。
Task 5
input5.txt
经过观察,先读入 \(n-1\) 条有权边(应该是构成一棵树),再读入 \(m\) 组点对,计算答案。
先试试 \(m=1\) 的情况。对于 \((u,v)\),容易发现就是 \(\operatorname{dist}(u,v)\)。
再试试 \(m=2\),发现答案非常神秘,为啥那两个点对的距离是 \(5\) 和 \(20\),最后的答案还能是 \(17\) 啊。于是试了一堆二元运算符后发现答案是所有距离的异或和,就离谱。
Task 6
input6.txt
长得和 input5.txt
一样捏。所以就很轻松了,发现不同点在于 \(\operatorname{dist}(u,v)\) 变成了 \(\min\limits_{t\in(u\to v)} w_t\)。仍然是异或全部权值。
然后你发现你错了。实际上可以通过输入询问点对 \((u,u)\) 来获取 \(\text{minn}\) 的初值应为 \(1987654321\)。
Task 7
(表格在洛谷可能会寄,请移步博客园)
输入规模又变小了。设每次读入的两数为 \((n,m)\),直接打表:
\(n\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) |
---|---|---|---|---|---|---|---|---|---|
\(m=1\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) |
\(m=2\) | \(2\) | \(5\) | \(7\) | \(10\) | \(12\) | \(15\) | \(17\) | \(20\) | \(22\) |
\(m=3\) | \(3\) | \(7\) | \(12\) | \(16\) | \(19\) | \(25\) | \(28\) | \(32\) | \(37\) |
\(m=4\) | \(4\) | \(10\) | \(16\) | \(24\) | \(28\) | \(36\) | \(40\) | \(48\) | \(54\) |
\(m=5\) | \(5\) | \(12\) | \(19\) | \(28\) | \(37\) | \(46\) | \(51\) | \(60\) | \(67\) |
观察 \((m=2)\Rightarrow(m=3)\),打表 \(a_{n,m}-a_{n,m-1}\):
\(n\) | \(1\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(7\) | \(8\) | \(9\) |
---|---|---|---|---|---|---|---|---|---|
\(m=(1\Rightarrow2)\) | \(1\) | \(3\) | \(4\) | \(6\) | \(7\) | \(9\) | \(10\) | \(12\) | \(13\) |
\(m=(2\Rightarrow3)\) | \(1\) | \(2\) | \(5\) | \(6\) | \(7\) | \(10\) | \(11\) | \(12\) | \(15\) |
\(m=(3\Rightarrow4)\) | \(1\) | \(3\) | \(4\) | \(8\) | \(9\) | \(11\) | \(12\) | \(16\) | \(17\) |
\(m=(4\Rightarrow5)\) | \(1\) | \(2\) | \(3\) | \(4\) | \(9\) | \(10\) | \(11\) | \(12\) | \(13\) |
再差分,打表 \(b_{n,m}-b_{n-1,m}\):
\(n\) | \(1\Rightarrow2\) | \(2\Rightarrow3\) | \(3\Rightarrow4\) | \(4\Rightarrow5\) | \(5\Rightarrow6\) | \(6\Rightarrow7\) | \(7\Rightarrow8\) | \(8\Rightarrow9\) |
---|---|---|---|---|---|---|---|---|
\(m=(1\Rightarrow2)\) | \(2\) | \(1\) | \(2\) | \(1\) | \(2\) | \(1\) | \(2\) | \(1\) |
\(m=(2\Rightarrow3)\) | \(1\) | \(3\) | \(1\) | \(1\) | \(3\) | \(1\) | \(1\) | \(3\) |
\(m=(3\Rightarrow4)\) | \(2\) | \(1\) | \(4\) | \(2\) | \(1\) | \(4\) | \(2\) | \(1\) |
\(m=(4\Rightarrow5)\) | \(1\) | \(1\) | \(1\) | \(5\) | \(1\) | \(1\) | \(1\) | \(1\) |
整理一下。
\(n\) | \(2\) | \(3\) | \(4\) | \(5\) | \(6\) | \(6\) | \(8\) | \(9\) |
---|---|---|---|---|---|---|---|---|
\(m=2\) | \(2\) | \(1\) | \(2\) | \(1\) | \(2\) | \(1\) | \(2\) | \(1\) |
\(m=3\) | \(1\) | \(3\) | \(1\) | \(1\) | \(3\) | \(1\) | \(1\) | \(3\) |
\(m=4\) | \(2\) | \(1\) | \(4\) | \(2\) | \(1\) | \(4\) | \(2\) | \(1\) |
\(m=5\) | \(1\) | \(1\) | \(1\) | \(5\) | \(1\) | \(1\) | \(1\) | \(1\) |
显然即 \(c_{n,m}=\gcd(n,m)\)。倒推一下就能得到 \(a_{n,m}=\sum\limits_{i=1}^n\sum\limits_{j=1}^m \gcd(i,j)\)。
贺一下 P2398 的代码即可。\(n\ne m\) 时是一个很小的点,所以直接暴力。
Task 8
很多人说这一问很难,但是我觉得还好捏。
随便输进去一个排列,发现答案是 \(\dfrac{n(n+1)}2\),很容易想到答案是这个数组的 \([l,r]\) 数量。
于是输入 \(\{1,2,1,2\}\),发现答案是 \(6\)。枚举一下 \([l,r]\) 就能发现求的是本质不同的子串个数。
去 P2408 贺个题解改一改即可。
Task 9
input9.txt
显然让我们输入一些点对。瞎输了一下,为啥是小数啊。
于是输入 \((1,2), (3,4)\),发现答案是 \(2.828\approx2\sqrt2=\sqrt8\)。很显然是 \((x_i,y_i)\) 在平面上两点的距离。
那么就很简单了,多输入几个数就能发现是平面最近点对。
去 P7883 贺个代码即可。
Task 10
这种题目总是有一些 Task 是不正经的 /hanx。
纯答案题解
- Task1:对于字母 \(\texttt{a}\sim\texttt{z}\),映射 \(\texttt{yfrbkgimujvphatdsnelozcxwq}\)。
- Task2:\(a_n=\Big(\normalsize n(2020+2016(n-1))+10\Big)\normalsize\bmod 233333\)。
- Task3:\(a_n=\left\lfloor\sqrt{\dfrac n\pi}\right\rfloor\)。
- Task4:给定一张图,输出 \(\sum\textbf{连通块的大小}^2\)。
- Task5:给定一棵有边权树,输出 \(\oplus \operatorname{dist}(u,v)\)。
- Task6:给定一棵有边权树,输出 \(\oplus \operatorname{minw}(u,v)\)。
- Task7:\(\sum\limits_{i=1}^n\sum\limits_{j=1}^m\gcd(i,j)\)。\(n\ne m\) 的情况允许暴力。
- Task8:本质不同的子串个数。
- Task9:平面最近点对。
- Task10:\(10\) 个
invalid input!
。