第一题

判断一个字符串数组中有多少个字符串是特定字符串的子串,使用string::find即可,判断返回值是否是string::npos

第二题

构造一个数组,使得数组中不存在任何相邻的三个数字a, b, c,满足a + c = 2b

想要该条件不满足,实际上也就是让b - a = c - b对任何三个相邻数字不满足,显然,我们可以进行如下的一个简单构造:

将前一半数字放置在偶数位置上,后一半数字放置在基数位置上。

上述构造保证了差值是正负正负……分布的。

第三题

本场比赛花了最长时间的题目,事后复盘,主要存在两个问题:

  1. 大概猜到了规律,但是没有大胆验证,而是尝试通过比较一般的方式思考,浪费了比较多的时间;
  2. 对于右移操作的不熟悉,中间多次RE;

前者是算法思路,后者是对c的运算符运算底层害不够熟悉。

本题给定一个p对应的幂集(去掉0),并且可以任意调换两个数字中的各个位,问怎样使得最后的乘积最小。

显然,对于任何两个数字而言,最好的策略就是让其中一个数字尽量小,我猜测的策略是通过逐个配对,将一系列数字变为1。

坑点在于这个运算不可以使用左移,只能通过快速幂;ull的右移也应该通过除法做。

第四题

说是hard,其实思路很简单,有一定编码难度,但是一直RE(原因是它给的Cells数组从中的索引从1开始)。

显然可以直接二分,判定使用bfs即可。