第十四届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
A. 日期统计
思路:
- 可以写
8
层for
循环,也可以写dfs
。
时间复杂度:\(O(2^{12})\)
1 | int m[] { |
C. 冶炼金属
思路:
- 求最大值:直接二分第一个大于 \(\frac{A}{B}\) 的位置,然后不断地取 \(max\)
- 求最小值:每次直接整除,然后取
min
即可
时间复杂度:\(O(Nmax(a_i, b_i))\)
1 | signed main() { |
D. 飞机降落
思路:
- 根据数据范围可以推测,这题是暴搜,难点在于搜的方式
- 我们可以从第
1
个位置开始搜索,然后当搜到最后一个位置就结束,每次走到一个新的位置,然后记录,当前的时间是否与前面盘旋的飞机的最小时间相冲突,如果不冲突,就继续搜索,如果搜索了所有的方案,都没找到不合法的情况,就输出YES
,否则NO
时间复杂度:\(O(n^n)\)
1 | struct node { |
E. 接龙数列
思路:
时间复杂度:
1 | signed main() { |
F. 岛屿个数
思路:
- 首先,这个可能出现一个一圈,中间一个小岛,然后搜错。
- 所以我们要把最外围的一层扩展为海水,然后把其他可以渗透的位置都染色,最开始预处理的时候,设八个方向的向量,然后开始染色,等染色完,我们就见到一个群岛就记录一个,最后输出即可。
- 难点在于怎么处理一个群岛
时间复杂度:\(O(NM)\)
1 | const int dx[] {0, 1, 0, -1, 1, 1, -1, -1}; |
G. 子串简写
思路:
时间复杂度:
1 | signed main() { |