藍橋杯備賽學習筆記:高頻考點與真題預測(C++/Java/python版)

2025藍橋杯備賽學習筆記

——高頻考點與真題預測

一、考察趨勢分析

通過對第13-15屆藍橋杯真題的分析,可以發現題目主要圍繞基礎算法、數據結構、數學問題、字符串處理、編程語言基礎展開,且近年逐漸增加動態規劃、圖論、貪心算法等較難題目。

1. 基礎算法(必考)

  • 排序與查找
    • 快速排序、歸并排序(手寫實現)
    • 二分查找(變種題,如旋轉數組查找)
  • 搜索算法
    • DFS(回溯、排列組合)
    • BFS(最短路徑、層序遍歷)
  • 貪心算法
    • 區間調度、背包問題(部分背包)
  • 動態規劃(重點)
    • 背包問題(01背包、完全背包)
    • 最長公共子序列(LCS)
    • 股票買賣問題(變種DP)

2. 數據結構(必考)

  • 線性表
    • 數組(前綴和、差分數組)
    • 鏈表(反轉、快慢指針)
  • 樹與二叉樹
    • 二叉搜索樹(BST)的插入、刪除
    • 平衡二叉樹(AVL、紅黑樹概念)
  • 圖論
    • 最短路徑(Dijkstra、Floyd)
    • 最小生成樹(Prim、Kruskal)
  • 棧與隊列
    • 單調棧(接雨水、柱狀圖最大矩形)
    • 隊列(BFS、滑動窗口)

3. 數學問題(常考)

  • 數論
    • 素數篩(埃氏篩、歐拉篩)
    • 最大公約數(GCD)、最小公倍數(LCM)
  • 組合數學
    • 排列組合(卡特蘭數、容斥原理)
  • 位運算
    • 異或性質、狀態壓縮(子集枚舉)

4. 字符串處理(常考)

  • 字符串匹配
    • KMP算法(模式匹配)
    • 字典樹(Trie)
  • 字符串操作
    • 反轉、子串查找、回文判斷

5. 編程語言基礎(C++/Java)

  • 語法基礎
    • 變量、循環、遞歸
  • 文件操作
    • 讀寫文件(藍橋杯常考)
  • 輸入輸出優化
    • C++ scanf/printf vs cin/cout(關閉同步流)

二、預測題目與解題思路

1. 算法類

題目1:最大子數組和(動態規劃)
  • 描述:給定一個整數數組 nums,找到和最大的連續子數組。

  • 解題思路

  • C++

    #include <vector>
    #include <algorithm>
    using namespace std;int maxSubArray(vector<int>& nums) {int n = nums.size();vector<int> dp(n);dp[0] = nums[0];int res = dp[0];for (int i = 1; i < n; i++) {dp[i] = max(nums[i], dp[i-1] + nums[i]);res = max(res, dp[i]);}return res;
    }
    
  • Java

    public int maxSubArray(int[] nums) {int n = nums.length;int[] dp = new int[n];dp[0] = nums[0];int res = dp[0];for (int i = 1; i < n; i++) {dp[i] = Math.max(nums[i], dp[i-1] + nums[i]);res = Math.max(res, dp[i]);}return res;
    }
    
  • Python

    def maxSubArray(nums):dp = [0] * len(nums)dp[0] = nums[0]for i in range(1, len(nums)):dp[i] = max(nums[i], dp[i-1] + nums[i])return max(dp)
    
  • 變種:如果數組是環形的(首尾相連),如何計算?

題目2:最短路徑(Dijkstra算法)
  • 描述:給定帶權圖,求從 startend 的最短路徑。

  • 解題思路

  • C++

    #include <vector>
    #include <queue>
    #include <climits>
    using namespace std;vector<int> dijkstra(vector<vector<pair<int, int>>>& graph, int start) {int n = graph.size();vector<int> dist(n, INT_MAX);dist[start] = 0;priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;pq.push({0, start});while (!pq.empty()) {auto [current_dist, u] = pq.top();pq.pop();if (current_dist > dist[u]) continue;for (auto [v, w] : graph[u]) {if (dist[v] > dist[u] + w) {dist[v] = dist[u] + w;pq.push({dist[v], v});}}}return dist;
    }
    
  • Java

    import java.util.*;public int[] dijkstra(List<List<int[]>> graph, int start) {int n = graph.size();int[] dist = new int[n];Arrays.fill(dist, Integer.MAX_VALUE);dist[start] = 0;PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);pq.offer(new int[]{0, start});while (!pq.isEmpty()) {int[] curr = pq.poll();int u = curr[1], currentDist = curr[0];if (currentDist > dist[u]) continue;for (int[] edge : graph.get(u)) {int v = edge[0], w = edge[1];if (dist[v] > dist[u] + w) {dist[v] = dist[u] + w;pq.offer(new int[]{dist[v], v});}}}return dist;
    }
    
  • Python

    import heapq
    def dijkstra(graph, start):heap = [(0, start)]dist = {node: float('inf') for node in graph}dist[start] = 0while heap:current_dist, u = heapq.heappop(heap)if current_dist > dist[u]:continuefor v, w in graph[u].items():if dist[v] > dist[u] + w:dist[v] = dist[u] + wheapq.heappush(heap, (dist[v], v))return dist
    

2. 數據結構類

題目3:二叉搜索樹的插入與刪除
  • 描述:實現BST的插入和刪除操作。

  • 解題思路

  • C++

    struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    };TreeNode* insert(TreeNode* root, int val) {if (!root) return new TreeNode(val);if (val < root->val) root->left = insert(root->left, val);else root->right = insert(root->right, val);return root;
    }
    
  • Java

    class TreeNode {int val;TreeNode left, right;TreeNode(int x) { val = x; }
    }public TreeNode insert(TreeNode root, int val) {if (root == null) return new TreeNode(val);if (val < root.val) root.left = insert(root.left, val);else root.right = insert(root.right, val);return root;
    }
    
  • `Python

    class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef insert(root, val):if not root:return TreeNode(val)if val < root.val:root.left = insert(root.left, val)else:root.right = insert(root.right, val)return root
    
題目4:最長回文子串(動態規劃/中心擴展)
  • 描述:給定字符串 s,返回最長回文子串。

  • 解題思路

  • C++

    string longestPalindrome(string s) {int n = s.size();int start = 0, maxLen = 1;auto expand = [&](int l, int r) {while (l >= 0 && r < n && s[l] == s[r]) {if (r - l + 1 > maxLen) {maxLen = r - l + 1;start = l;}l--; r++;}};for (int i = 0; i < n; i++) {expand(i, i);     // 奇數長度expand(i, i+1);   // 偶數長度}return s.substr(start, maxLen);
    }
    
  • Java

    public String longestPalindrome(String s) {int n = s.length();int start = 0, maxLen = 1;for (int i = 0; i < n; i++) {expand(s, i, i);     // 奇數長度expand(s, i, i+1);   // 偶數長度}return s.substring(start, start + maxLen);
    }private void expand(String s, int l, int r) {while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {if (r - l + 1 > maxLen) {maxLen = r - l + 1;start = l;}l--; r++;}
    }
    
  • Python

    def longestPalindrome(s):n = len(s)dp = [[False] * n for _ in range(n)]res = ""for i in range(n-1, -1, -1):for j in range(i, n):if s[i] == s[j] and (j - i <= 2 or dp[i+1][j-1]):dp[i][j] = Trueif j - i + 1 > len(res):res = s[i:j+1]return res
    

3. 數學問題類

題目5:數字1的個數(數位DP)
  • 描述:計算 1~n 中數字 1 出現的次數。

  • 解題思路

  • C++

    int countDigitOne(int n) {int count = 0;for (long i = 1; i <= n; i *= 10) {long divider = i * 10;count += (n / divider) * i + min(max(n % divider - i + 1, 0L), i);}return count;
    }
    
  • Java

    public int countDigitOne(int n) {int count = 0;for (long i = 1; i <= n; i *= 10) {long divider = i * 10;count += (n / divider) * i + Math.min(Math.max(n % divider - i + 1, 0), i);}return count;
    }
    
  • Python

    def countDigitOne(n):count = 0i = 1while i <= n:divider = i * 10count += (n // divider) * i + min(max(n % divider - i + 1, 0), i)i *= 10return count
    
題目6:階乘計算(大數處理)
  • 描述:計算 n!n 可能很大,如 1000!)。
  • 解題思路
    def factorial(n):res = 1for i in range(1, n+1):res *= ireturn res
    
    • 優化:如果 n 很大,使用 math.factorial 或高精度計算(如Python默認支持大整數)。

4. 字符串處理類

題目7:判斷回文串(雙指針)
  • 描述:判斷字符串 s 是否是回文。

  • 解題思路

  • C++

    bool isPalindrome(string s) {int left = 0, right = s.size() - 1;while (left < right) {if (s[left++] != s[right--]) return false;}return true;
    }
    
  • Java

    public boolean isPalindrome(String s) {int left = 0, right = s.length() - 1;while (left < right) {if (s.charAt(left++) != s.charAt(right--)) return false;}return true;
    }
    
  • Python

    def isPalindrome(s):left, right = 0, len(s)-1while left < right:if s[left] != s[right]:return Falseleft += 1right -= 1return True
    
題目8:子序列判斷(雙指針)
  • 描述:判斷 s 是否是 t 的子序列。
  • 解題思路
    def isSubsequence(s, t):i, j = 0, 0while i < len(s) and j < len(t):if s[i] == t[j]:i += 1j += 1return i == len(s)
    

三、備考策略

  1. 刷題優先級

    • 必刷:動態規劃(背包、LCS)、DFS/BFS、Dijkstra、二分查找。
    • 次重點:數論(素數篩、GCD)、字符串(KMP、回文)。
    • 保底題:文件操作、遞歸、基礎語法。
  2. 時間分配建議

    • 填空題(5題):10分鐘/題(數學、模擬題為主)。
    • 編程題(5題):前2題暴力解法(30分鐘),后3題優化(60分鐘)。
  3. 調試技巧

    • 對拍:用暴力算法驗證優化算法的正確性。
    • 邊界測試n=0n=1e5 等極端情況。

四、總結

藍橋杯題目題型固定但變種多,重點掌握:

? 動態規劃(背包、LCS)

? 圖論(Dijkstra、BFS/DFS)

? 數學(數論、組合數學)

? 字符串(KMP、回文)

? 數據結構(BST、單調棧)

建議

  • 整理模板代碼(如快速冪、并查集)。
  • 模擬考試環境(限時、無IDE調試)。

祝大家備賽順利,沖擊省一! 🚀

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/75281.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/75281.shtml
英文地址,請注明出處:http://en.pswp.cn/web/75281.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250410在榮品的PRO-RK3566開發板使用Rockchip原廠的buildroot系統時自動掛載eth0【直接編譯進IMG】

【暫時沒有找到第一次編譯就可以修改的地方&#xff01;&#xff01;&#xff01;&#xff01;】 rootrootrootroot-X99-Turbo:~/RK3566_RK3568_Linux5.10_V1.2.0$ find . -name interfaces 【完整編譯之后&#xff0c;基本確認修改這里有效。】 ./buildroot/output/rockchip_r…

c11新特性,繼承構造函數

#include <iostream> #include <string>class Person { public:std::string name;int age;// 主構造函數Person(const std::string& name, int age) : name(name), age(age) {std::cout << "Person created with name: " << name <&l…

【TS學習】(24)什么是裝飾器

在 TypeScript 中&#xff0c;裝飾器&#xff08;Decorators&#xff09; 是一種特殊的聲明&#xff0c;用于為類、類成員&#xff08;屬性、方法、訪問器&#xff09;、方法參數或整個類添加元數據或修改其行為。裝飾器是 JavaScript 和 TypeScript 的實驗性特性&#xff0c;廣…

datagrip如何連接數據庫

datagrip連接數據庫的步驟 2025版本 想要鏈接數據庫是需要一個jar包的&#xff0c;所以將上面進行刪除之后&#xff0c;需要下載一個jar包 那么這個時候需要鏈接上傳一個mysql鏈接的jar包 選擇核心驅動類 上述操作完成之后&#xff0c;然后點擊apply再點擊ok即可 如下圖說明my…

菊風RTC 2.0 開發者文檔正式發布,解鎖音視頻新體驗!

重磅發布&#xff01; 開發者們&#xff0c;菊風實時音視頻2.0文檔已正式發布上線&#xff0c;為您提供更清晰、更高效的開發支持&#xff01;讓菊風實時音視頻2.0為您的音視頻應用加速~ 菊風實時音視頻2.0聚焦性能升級、體驗升級、錄制服務升級&#xff0c;助力視頻通話、語…

輕量級碎片化筆記memos本地NAS部署與跨平臺跨網絡同步筆記實戰

文章目錄 前言1. 使用Docker部署memos2. 注冊賬號與簡單操作演示3. 安裝cpolar內網穿透4. 創建公網地址5. 創建固定公網地址 推薦 ? 前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。 點擊跳轉到網站 前言…

【Vue #2】腳手架 指令

一、腳手架 腳手架&#xff1a;一個保證各項工作順利開展的平臺&#xff0c;方便我們 拿來就用&#xff0c;零配置 1. Vue 代碼開發方式 相比直接 script 引入 vue 源碼&#xff0c;有沒有更好的方式編寫vue代碼呢? ① 傳統開發模式&#xff1a; 基于html文件開發Vue&…

ArkTS語言入門之接口、泛型、空安全、特殊運算符等

前言 臭寶們&#xff0c;今天我們來學習ArkTS中最后的一些內容。 實現接口 包含implements子句的類必須實現列出的接口中定義的所有方法&#xff0c;但使用默認實現定義的方法除外。 interface DateInterface {now(): string; } class MyDate implements DateInterface {no…

Maven超級詳細安裝部署

1.到底什么是Maven&#xff1f;搞清楚這個 Maven 是一個項目管理工具&#xff0c;主要用于 Java 項目的構建、依賴管理和文檔生成。 它基于項目對象模型&#xff08;POM&#xff09;&#xff0c;通過 pom.xml 文件定義項目的配置。 &#xff08;簡單說破&#xff1a;就是工程…

高并發內存池(三):PageCache(頁緩存)的實現

前言&#xff1a; 在前兩期內容中&#xff0c;我們深入探討了內存管理機制中在 ThreadCache 和 CentralCache兩個層級進行內存申請的具體實現。這兩層緩存作為高效的內存分配策略&#xff0c;能夠快速響應線程的內存需求&#xff0c;減少鎖競爭&#xff0c;提升程序性能。 本期…

機器學習 | 強化學習方法分類匯總 | 概念向

文章目錄 ??Model-Free RL vs Model-Based RL??核心定義??核心區別??Policy-Based RL vs Value-Based RL??核心定義?? 核心區別??Monte-Carlo update vs Temporal-Difference update??核心定義??核心區別??On-Policy vs Off-Policy??核心定義??核心區別…

GSO-YOLO:基于全局穩定性優化的建筑工地目標檢測算法解析

論文地址:https://arxiv.org/pdf/2407.00906 1. 論文概述 《GSO-YOLO: Global Stability Optimization YOLO for Construction Site Detection》提出了一種針對建筑工地復雜場景優化的目標檢測模型。通過融合全局優化模塊(GOM)?、穩定捕捉模塊(SCM)?和創新的AIoU損失函…

Java學習手冊:JVM、JRE和JDK的關系

在Java生態系統中&#xff0c;JVM&#xff08;Java虛擬機&#xff09;、JRE&#xff08;Java運行時環境&#xff09;和JDK&#xff08;Java開發工具包&#xff09;是三個核心概念。它們共同構成了Java語言運行和開發的基礎。理解它們之間的關系對于Java開發者來說至關重要。本文…

lanqiaoOJ 2489 進制

//x的初始值一定要設置為0,否則測試的答案是對的,但是通不過去 #include<bits/stdc.h> using namespace std; const int N50; int a[N]; using lllong long; int main(){ ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); string s"2021ABCD"; for(int i…

Python基礎知識點(類和對象)

""" 編程思維---解決問題的方式方法 面向過程---C語言 面向對象---C java python python中封裝類的語法 class 類名&#xff08;父類&#xff09; 類體 注意&#xff1a; 1.類名--約定 大駝峰法 首字母要大寫 2.父類如果有的話就寫&#xff0c;沒有的話…

記錄一下學習docker的命令(不斷補充中)

#2025-04-10,22:12############### 在wsl2中安裝了ubuntu24.04.1后有部署了docker&#xff0c; 如果沒有啟動docker可以通過下列命令啟動docker&#xff1a; sudo systemctl start docker 執行下列命令可以看到docker狀態&#xff0c;并不占用控制臺的命令&#xff1a; su…

【01BFS】# P4667 [BalticOI 2011] Switch the Lamp On 電路維修 (Day1)|普及+

本文涉及知識點 CBFS算法 題目描述 Casper is designing an electronic circuit on a N M N \times M NM rectangular grid plate. There are N M N \times M NM square tiles that are aligned to the grid on the plate. Two (out of four) opposite corners of each …

參考平面跨分割情況下的信號回流

前言&#xff1a;弄清楚信號的回流路徑&#xff0c;是學習EMC和高速的第一步&#xff01; 如果我們不管信號的回流路徑&#xff0c;會造成什么后果&#xff1f;1、信號完整性問題&#xff0c;信號的回流路徑不連續會導致信號反射、衰減和失真。2、信號衰減和噪聲干擾&#xff…

almalinux 8 9 升級到指定版本

almalinux 8 update 指定版本 almalinux歷史版 所有版本almalinux最新版 所有版本vault歷史版 almalinux最新版 (https://repo.almalinux.org )地址后面增加不同名稱 echo "delete repos" rm -rf /etc/yum.repos.d/*echo "new almalinux repo" cat <&…

阿里云CDN應對DDoS攻擊策略

阿里云CDN遭遇DDoS攻擊時&#xff0c;可通過以下綜合措施進行應對&#xff0c;保障服務的穩定性和可用性&#xff1a; 1. 啟用阿里云DDoS防護服務 阿里云提供專業的DDoS防護服務&#xff0c;通過流量清洗中心過濾惡意流量&#xff0c;確保合法請求正常傳輸。該服務支持按需選…