好的,以下是针对蓝桥杯C++竞赛准备的第二课内容,涵盖常见考点和训练建议:


一、数据结构强化训练

  1. 数组与字符串

    • 掌握字符数组与string类的转换
    • 双指针技巧:
      // 有序数组去重
      int removeDuplicates(vector<int>& nums) {
          if (nums.empty()) return 0;
          int slow = 0;
          for (int fast = 1; fast < nums.size(); ++fast) {
              if (nums[fast] != nums[slow]) {
                  nums[++slow] = nums[fast];
              }
          }
          return slow + 1;
      }
      

  2. STL容器实战

    • vector动态扩容机制
    • map/unordered_map的选择:
      // 统计字符频率
      unordered_map<char, int> freq;
      for (char c : s) freq[c]++;
      


二、算法模板精讲

1. 深度优先搜索(DFS)
void dfs(int cur, vector<bool>& visited, vector<vector<int>>& graph) {
    visited[cur] = true;
    for (int neighbor : graph[cur]) {
        if (!visited[neighbor]) {
            dfs(neighbor, visited, graph);
        }
    }
}

2. 动态规划(DP)

经典问题:斐波那契数列优化
$$dp[i] = dp[i-1] + dp[i-2]$$

int fib(int n) {
    if (n <= 1) return n;
    int a = 0, b = 1;
    for (int i = 2; i <= n; ++i) {
        int tmp = a + b;
        a = b;
        b = tmp;
    }
    return b;
}


三、竞赛技巧

  1. 输入输出加速

    ios::sync_with_stdio(false);
    cin.tie(0);
    
  2. 边界条件处理

    • 数组越界检查
    • 大数溢出判断(如使用long long

四、实战训练建议

  1. 每日一题
  2. 模拟赛复盘
    • 记录每道题的时间消耗
    • 分析错误案例的特殊边界

需要进一步讲解某个知识点或提供具体题目解析吗?

更多推荐