前言
\(\texttt{Update on 2020.06.03:}\) 勉强过线,被 AK 爷 WYCdalao 和 XJQdalao 吊打 /kk 。
\(\texttt{Update on 2020.07.13:}\) 不装了。\(90+100+100+100=390pts\)。全市第三。
快要特长生考试了,把前几年特长生试题的错例和一些相对有价值的题目写一写。
希望能过吧 /xyx 。
一些 sb 的错误
- 不确定是否有多余空格或者换行符的字符串读入可以使用
getline(cin,s)
,保证不会因为多余字符而出错。
例题题解
2013年 T4 廉价最短路径
定义有向图中权值和最小的最短路径的权值和为该图廉价最短路径的长度。其中一条路径的长度为其边数。求从 1 到 2 的廉价最短路径长度。
\(n \leq 100,m\leq 1000\)。
在 Floyd 求最短路径的基础上加上一个 \(cost[i][j]\),表示当前从 \(i\) 到 \(j\) 的廉价最短路径长度。最短路转移时顺便维护 \(cost\) 即可。
时间复杂度 \(O(n^3)\)。
2014年 T2 数字积木
求若干个正整数全部连接起来能得到的最大整数是多少。
\(n\leq 1000,\) 数字 \(\leq 10^{200}\)
排序,如果 \(\overline{ab}>\overline{ba}\),那么 \(a\) 最终一定在 \(b\) 前面。
证明:如果 \(a,b\) 中任意一个不是另一个的前缀,那么该结论显然成立。如果 \(a,b\) 中有一个是另一个的前缀,那么最终答案夹在 \(a,b\) 两个数的数字也一定有 \(a,b\) 中一个为前缀。设 \(b\) 后面的数为 \(c\),此时 \(\overline{ba}\) 就是 \(\overline{bc}\) 的前缀,所以有 \(\overline{ba}>\overline{ab}\),矛盾。
时间复杂度 \(O(n\times len\log n)\)。其中 \(len\) 是数字长度。
2015年 T3 糊涂的教授
求二分图完全匹配是否存在多种匹配。
\(n\leq 26\)。
首先如果一个子图,黑点和白点的数量不一致,那么显然不行。
接下来考虑拓扑排序。如果一个点只有一个能匹配的对象,那么就将这一组点匹配。如果最后存在点无法匹配(即存在环),那么就有多解。
2015年 T4 集合问题
求有多少种方案将 \(1\sim n\) 的每个数都划分到两个集合中,使得这两个集合的数字和相等。
\(n\leq 39\)。
首先如果 \(s=\sum^{n}_{i=1}i\) 不是 2 的倍数,那么无解。否则我们只需能否从 \(1\sim n\) 种选出若干个数和为 \(\frac{s}{2}\)。
可以用背包解决,但是 \(n\leq 40\),也可以分断爆搜。
记 \(cnt[s]\) 表示组合出和为 \(s\) 的方案数。对于 \(1\sim \frac{n}{2}\) 记录到 \(cnt[s][1]\) 种,\(\frac{n}{2}+1 \sim n\) 记录到 \(cnt[s][2]\) 中。
然后枚举 \(i=0\to m\),答案为 \(cnt[i][1]\times cnt[m-i][2]\) 的和。
记得最终答案要除以 2,因为一个方案被我们计算了两次。
时间复杂度 \(O(2^{\frac{n}{2}}+m)\)。
2017年 T4 摆渡线路
给出一个圆,圆上有 100 个编号为 \(1\sim 100\) 的点。有 \(n\) 条边,每条边连接两个点。询问最多能保留多少条边使得剩余的边处在点外两两不相交。
\(n\leq 10000\)。
考虑将圆从点 100 到点 1 的边断开,变成一条线段,那么原先圆中两条线段只有包含和并列两种关系。
设 \(f[i][j]\) 表示从点 \(i\) 到点 \(j\) 最多能选择多少条线段。那么对于并列的线段很好计算,枚举分界点 \(k\),那么有
而对于包含的情况,只有当 \(i,j\) 两点有连接的边的时候才可能包含。容易发现此时无论 \(i\to j\) 中选择多少条线段并列,都不会影响选择 \(i,j\) 线段包含他们。所以如果存在 \(i,j\) 这条线段,那么 \(f[i][j]++\)。
时间复杂度 \(O(100^3)\)。
tan90° 的游记
连特长生考试都写游记了可海星。
进考场。后面的哥们上讲台拿东西 N 次,前面的阿姨 cstdio
敲错 N 次。
开题。
T1 历史最难第一题,傻逼高精加,过了样例,扔了。
T2 傻逼 BFS,过了样例,扔了。
T3 傻逼 dp,过了样例,扔了。
T4 傻逼推结论,过了样例,扔,哎还没扔呢。拍上了,扔了。
没扫雷,开始玩数字十六宫格,真羡慕那些玩小恐龙的,我怎么就没想到呢 /kk。
玩着玩着发现 T1 没有考虑 0 的情况。改好了,扔了。
玩着玩着发现 T2 没有考虑开局就炸飞天的情况。改好了,扔了。\(\color{white}{\texttt{试图给 T2 编一个你的名字的背景,发现语文功底不彳亍 /xyx。}}\)
玩着玩着发现 T3 没有考虑 \(i=0\) 时的边界问题。改好了,扔了。
玩着玩着发现 T4 没有对 10007 取模。改好了,扔了。
考完了,没有 AK。真是个彩笔呢哈哈哈。
2020年特长生题解
T1
给出两个绝对值不超过 \(10^{30}\) 的数字且满足它们的乘积非负。求它们的和。
直接上高精度即可。注意其中一个数为 0 的情况。
T2
有若干个形如“\((x,y)\) 以及其四周的点在 \(t\) 时刻后不能走”的要求,求走到安全区域的最短时间。无解输出 '-1'。
BFS。一个点到达的最短时间如果在该时间前已经被炸掉就不走了。
时间复杂度 \(O(nm)\)。
T3
给出一个母串和若干个基本串,求母串至少删除多少个字符就可以变成由若干个基本串组成的串。
设 \(f[i]\) 表示母串前 \(i\) 个字符至少删除多少个字符变成合法串。枚举每一个基本串,转移显然。
时间复杂度 \(O(n^2m)\)。
T4
一棵有点权的树,询问所有距离为 2 的点对权值积的和以及距离为 2 的点对权值积的最大值。
考虑枚举每一个中间点,那么能造成贡献的就是它相邻的点互相的贡献。
那么设与其相邻的点的权值分别为 \(a,b,c,d\),那么权值和
维护每个点的相邻的点的权值和以及权值平方和即可。最大值则容易求。
由于每条边只会便利 2 遍,所以时间复杂度 \(O(n)\)。