看到 PC 客户端对 ACMer 有加分项,就投了下这个。
\(2\) 个小时,前面有 \(40\) 道选择题,涉及内容包含数学、数据结构、操作系统、网络安全,还有一些关于 C++ 的类什么的和一些简单算法的原理什么的,不过前面那些东西由于没来得及回顾,做的不是很顺,弄了一个小时左右。
\(2\) 道编程题。
第一题是给你两个字符串 \(s\) 和 \(t\),问 \(s\) 能否最多一次从中间找一段区间删除后加到 \(t\) 的后面使得 \(s\) 和 \(t\) 相等,\(|s|,|t| \le 1000\),多组样例 \(t\le 10\)。
很明显的字符串哈希,\(n^2\) 枚举区间,然后判一下就行,但是用板子太久了,忘记了截取和拼接函数咋写了,手推了一下发现不对放弃了;换了一种做法,发现删掉的区间要使得 \(s\) 和 \(t\) 相等,其实就是这段区间要等于 \(s\) 的后缀,于是对 \(s\) 做了个后缀 \(lcp\),想着枚举 \(lcp\) 的位置然后去判相等,样例过了交上去只过了 \(27\%\),这个时候还有半个小时左右,有点急,索性想着敲个暴力,思路和字符串哈希的一样,只不过直接用的 \(substr\) 函数截取,裸的 \(O(n^3)\),然后很搞笑的一幕,\(\text{AC}\) 了,太水了,那我前面折腾的半个多小时算什么。。
第二题是给 \(n\) 个坐标,每个坐标能和周围的八个方向形成一个联通块,每个联通块的贡献是联通块大小的平方,问每次新加一个点整个图的总贡献是多少。
题意很简单,但这是我根据样例猜出来的。。。
它给的题面不是这样的,题意里蹦出了个八联通块的定义,导致我一度以为是每个坐标周围八个格子算一块,刚开始这样写了遍发现对不上样例,后面理解过来大概就是并查集搞搞,七八分钟敲完,但是有个样例错了,来不及调试。
大概思路就是维护每个点的联通块,每新加一个点就把它原来的贡献减掉,最后加上当前点所在联通块的贡献,因为是二维的,需要离散一下处理些细节什么的。
总结下经验,下次还是带个电源再弄,录屏太耗电了;然后就是八股这些可能还是得看看,不过由于现在是秋招末了,我没太多时间,只能先海投看看能不能求个实习,等来年春招更有经验;还有就是下次这种题直接上来就写个暴力冲一发。。