好久没有打过比赛了,这次看到CSP报名免费就去玩了一下>_<
赛制是只准携带纸质参考资料(不过我没有准备),提交后能实时查看成绩。以下是题目回忆(数据范围不一定准确)。
T1:
给定二维平面上一些点,求其中离目标点最近的三个点。计算后排序即可。
T2:
给定二维平面上一个矩形和若干路径,如果路径中存在一个点在矩形中,则称为路径“经过”矩形;如果存在连续k个点在矩形中,则称为路径“逗留”在矩形中,求经过和逗留在矩形中的路径条数。滑动窗口即可,因为数据范围小,暴力好像也可以。
T3:
给定一个组合电路,其中包括输入端、一些门(not/or/and/xor/nand/nor)和连接线,判断其中是否存在环,如果不存在环,则对给定的输入端信号求其中一些门的输出信号。先拓扑排序判环,如果不存在环,按拓扑序BFS即可。
T4:
给定n(n<=100)维空间中的m(m<=1000)个点,还给定一个黑洞中心点及其半径(黑洞是个n维的球体)。求每个点到其它点的最短的不经过黑洞内部(可以经过边界)的曲线长度之和。
有40分的数据,所有点都在黑洞边界上,此时两点之间的最短曲线就是经过球面的那条弧长,可以先求夹角再求弧长,O(m^2*n)。
还有20分的数据n=2,观察样例我猜测,对A,B两点,从两个点向黑洞做切线,设交点为C,D,那么最短路径应该是AC->弧CD->DB。对于n=2来说应该挺好求的,但是我写到最后也没调出来qwq。
T5:
给定一种将密文转为明文(密文和明文全是小写字母)的方法:一个n(n<=50)页密码本,每页26行,每行有一个字符out和一个数字next。拿到密文后,将密码本翻到第一页,找到第一个密文字对应的行(比如a对应第一行,b对应第二行,以此类推),则第一个明文字是该行的out,然后将密码本翻到第next页继续第二个密文字的解密,依次进行下去直到全部解密完成。
现在给出一个单词集合S,集合中任何一个单词不是另一个的前缀。给定m,对k=1,2…m,求有多少个长度为k的密文满足以下条件:
- S中任何一个单词,不是密文的子串
- 这个密文的明文是由S中的单词拼接而成的
m<=2000,S中单词的长度总和不超过50。
看到这题我第一个反应就是AC自动机+DP,设f[i][j][k][t]表示长度为 i 的串,翻到第 j 页,密文在Trie图上到达 k 点,明文在Trie树上到达 t 点的方案数,转移要求就是密文在Trie图上不能到叶子,而明文在Trie树上不能到空节点,且走到叶子后下次要回到根继续走。统计答案时 t 必须是叶子。
写了一发wa了,只有64分,不知道这个算法是不是假的qwq。
最后只有404分qwq。