285场周赛总结
/ / 点击 / 阅读耗时 3 分钟第一题
判断一个字符串数组中有多少个字符串是特定字符串的子串,使用string::find
即可,判断返回值是否是string::npos
。
第二题
构造一个数组,使得数组中不存在任何相邻的三个数字a, b, c
,满足a + c = 2b
。
想要该条件不满足,实际上也就是让b - a = c - b
对任何三个相邻数字不满足,显然,我们可以进行如下的一个简单构造:
将前一半数字放置在偶数位置上,后一半数字放置在基数位置上。
上述构造保证了差值是正负正负……分布的。
第三题
本场比赛花了最长时间的题目,事后复盘,主要存在两个问题:
- 大概猜到了规律,但是没有大胆验证,而是尝试通过比较一般的方式思考,浪费了比较多的时间;
- 对于右移操作的不熟悉,中间多次RE;
前者是算法思路,后者是对c的运算符运算底层害不够熟悉。
本题给定一个p
对应的幂集(去掉0),并且可以任意调换两个数字中的各个位,问怎样使得最后的乘积最小。
显然,对于任何两个数字而言,最好的策略就是让其中一个数字尽量小,我猜测的策略是通过逐个配对,将一系列数字变为1。
坑点在于这个运算不可以使用左移,只能通过快速幂;ull的右移也应该通过除法做。
第四题
说是hard,其实思路很简单,有一定编码难度,但是一直RE(原因是它给的Cells数组从中的索引从1开始)。
显然可以直接二分,判定使用bfs即可。
感谢阅读!欢迎评论嗷~