藍橋杯之前綴和

一維前綴

解題思路

看到“區間之和”問題,直接想到“前綴和”
前綴和的核心公式: sum[i]=sum[i?1]+a[i]

利用前綴和求區間和 [l,r] 的公式: 區間和=sum[r]?sum[l?1]

解題步驟模板

  1. 輸入數組

    • 讀取數組長度 n 和查詢次數 m。

    • 讀取數組 a 的每個元素。

  2. 計算前綴和

    • 初始化一個前綴和數組 sum,長度為 n+1(方便處理邊界情況)。

    • 遍歷數組 a,計算前綴和

      for (int i = 1; i <= n; i++) {sum[i] = sum[i - 1] + a[i];
      }
  3. 處理查詢

    • 對于每個查詢 [l,r],直接利用前綴和公式計算區間和

      System.out.println(sum[r] - sum[l - 1]);

示例代碼模板?

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 輸入數組長度和查詢次數int n = scan.nextInt();int m = scan.nextInt();// 輸入數組int[] a = new int[n + 1];int[] sum = new int[n + 1];// 計算前綴和for (int i = 1; i <= n; i++) {a[i] = scan.nextInt();sum[i] = sum[i - 1] + a[i];}// 處理查詢for (int i = 0; i < m; i++) {int l = scan.nextInt();int r = scan.nextInt();System.out.println(sum[r] - sum[l - 1]);}scan.close();}
}

思維導圖

  1. 看到“區間之和”想到“前綴和”

    • 公式:sum[i]=sum[i?1]+a[i]

    • 區間和:sum[r]?sum[l?1]

  2. 實現步驟

    • 輸入數組和查詢。

    • 計算前綴和。

    • 處理查詢并輸出結果。

訓練方法

  1. 遇到“區間之和”問題,直接寫前綴和公式: sum[i]=sum[i?1]+a[i] 區間和=sum[r]?sum[l?1]

  2. 多做類似題目,強化這種思維模式。例如:藍橋官網、力扣等平臺上的區間和問題。

二維前綴和

問題描述

給定一個?n×mn×m?大小的矩陣?AA。

給定?qq?組查詢,每次查詢為給定?44?個正整數?x1,y1,x2,y2x1?,y1?,x2?,y2?,你需要輸出?∑i=x1x2∑j=y1y2Ai,j∑i=x1?x2??∑j=y1?y2??Ai,j??的值。

輸入格式

第一行輸入?33?個正整數?n,m,qn,m,q。(1≤n,m≤103,1≤q≤1051≤n,m≤103,1≤q≤105)

接下來?nn?行每行輸入?mm?個整數,表示?Ai,jAi,j?。(?103≤Ai,j≤103,1≤i≤n,1≤j≤m)(?103≤Ai,j?≤103,1≤i≤n,1≤j≤m)

接下來?qq?行,每行輸入?44?個正整數?x1,y1,x2,y2x1?,y1?,x2?,y2?。(1≤x1≤x2≤n,1≤y1≤y2≤m)(1≤x1?≤x2?≤n,1≤y1?≤y2?≤m)

輸出格式

對于每次查詢,輸出一個整數,表示查詢的子矩陣的和。

樣例輸入

3 4 3
1 7 2 4
3 6 2 8
2 1 2 3
1 1 2 2
2 1 3 4
1 3 3 4

樣例輸出

17
27
21

解題思路

1.?看到“二維區間和”問題,直接想到“二維前綴和”
  • 二維前綴和的核心公式:

    sum[i][j]=sum[i][j?1]+sum[i?1][j]?sum[i?1][j?1]+a[i][j]
  • 查詢子矩陣和的公式:

    區間和=sum[x2][y2]?sum[x2][y1?1]?sum[x1?1][y2]+sum[x1?1][y1?1]
2.?實現步驟
  1. 輸入矩陣

    • 讀取矩陣的行數 n、列數 m 和查詢次數 q

    • 讀取矩陣 a 的每個元素。

  2. 計算二維前綴和

    • 初始化一個二維前綴和數組 sum,大小為 (n+1)×(m+1)。

    • 遍歷矩陣 a,計算每個位置的二維前綴和:

      java

      復制

      for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = scan.nextInt();sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + a[i][j];}
      }
  3. 處理查詢

    • 對于每個查詢 (x1,y1) 到 (x2,y2),利用二維前綴和公式計算子矩陣和:

      java

      復制

      System.out.println(sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1]);
  4. 輸出結果

    • 對每個查詢輸出對應的子矩陣和。

?代碼模板

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 輸入矩陣的行數、列數和查詢次數int n = scan.nextInt();int m = scan.nextInt();int q = scan.nextInt();// 創建數組存儲原始矩陣和前綴和int[][] a = new int[n + 1][m + 1];int[][] sum = new int[n + 1][m + 1];// 計算二維前綴和for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = scan.nextInt();sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + a[i][j];}}// 處理查詢for (int i = 0; i < q; i++) {int x1 = scan.nextInt();int y1 = scan.nextInt();int x2 = scan.nextInt();int y2 = scan.nextInt();System.out.println(sum[x2][y2] - sum[x2][y1 - 1] - sum[x1 - 1][y2] + sum[x1 - 1][y1 - 1]);}scan.close();}
}

總結

  1. 看到“二維區間和”問題,直接想到“二維前綴和”。

  2. 核心公式

    • 二維前綴和:sum[i][j]=sum[i][j?1]+sum[i?1][j]?sum[i?1][j?1]+a[i][j]

    • 查詢子矩陣和:區間和=sum[x2][y2]?sum[x2][y1?1]?sum[x1?1][y2]+sum[x1?1][y1?1]

  3. 實現步驟

    • 輸入矩陣和查詢。

    • 計算二維前綴和。

    • 處理查詢并輸出結果。

相關的習題練習

小秋的矩陣
問題描述

給你一個?nn?行?mm?列只包含?00?和?11?的矩陣,求它的所有子矩陣中,是方陣而且恰好包含?kk?個?00?的數量。

方陣是行數和列數相等的矩陣。

子矩陣是從一個矩陣當中選取某些行和某些列交叉位置所組成的新矩陣(保持行與列的相對順序),被稱為原矩陣的一個子矩陣。

輸入格式

第?11?行輸入?33?個整數?n,m,kn,m,k,表示矩陣的行數,列數和所求子矩陣包含?00?的數量。

接下來?nn?行,每行輸入?mm?個整數,第?ii?表示給定矩陣的第?ii?行。

輸出格式

輸出僅一行,包含?11?個整數,表示答案。

樣例輸入

3 4 2
0 1 1 0
1 0 0 1
0 1 0 0

樣例輸出

4

說明

共有?44?個階數為?22?的方陣符合條件,左上角的坐標分別為?(1,1),(1,2),(1,3),(2,1)(1,1),(1,2),(1,3),(2,1)。

評測數據規模

對于?2020% 的評測數據,1≤n×m≤1031≤n×m≤103。

對于?4040% 的評測數據,1≤n×m≤1051≤n×m≤105。

對于?100100% 的評測數據,1≤n×m≤1061≤n×m≤106,0≤k≤n×m0≤k≤n×m。

代碼實現

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 讀取行數、列數和目標零的個數int n = scan.nextInt();int m = scan.nextInt();int k = scan.nextInt();// 創建數組存儲原始矩陣和前綴和int[][] tur = new int[n + 1][m + 1];int[][] sum = new int[n + 1][m + 1];// 輸入矩陣并計算前綴和for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {tur[i][j] = scan.nextInt();sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + tur[i][j];}}// 計數符合條件的子矩陣int count = 0;// 遍歷所有可能的正方形子矩陣的大小for (int size = 1; size <= Math.min(n, m); size++) {// 遍歷所有可能的起始位置for (int i = 1; i <= n - size + 1; i++) {for (int j = 1; j <= m - size + 1; j++) {// 計算子矩陣的右下角坐標int x2 = i + size - 1;int y2 = j + size - 1;// 計算子矩陣的和int total = sum[x2][y2] - sum[x2][j - 1] - sum[i - 1][y2] + sum[i - 1][j - 1];// 計算子矩陣中零的個數int tmp = size * size - total;// 如果符合條件,計數器加1if (tmp == k) {count++;}}}}// 輸出結果System.out.println(count);scan.close();}
}

?自學藍橋杯筆記,希望我們可以一起學習!

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

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

相關文章

【學習筆記】計算機網絡(八)—— 音頻/視頻服務

第8章 互聯網上的音頻/視頻服務 文章目錄 第8章 互聯網上的音頻/視頻服務8.1概述8.2 流式存儲音頻/視頻8.2.1 具有元文件的萬維網服務器8.2.2 媒體服務器8.2.3 實時流式協議 RTSP 8.3 交互式音頻/視頻8.3.1 IP 電話概述8.3.2 IP電話所需要的幾種應用協議8.3.3 實時運輸協議 RTP…

【WRF運行】解決metgrid生成文件太大無內存!

目錄 方法:改變工作目錄運行 metgrid.exe參考由于我的運行內存過小,當研究區較大時,metgrid生成文件內存太大,導致每次運行都報錯,此時可更改工作目錄(空余文件夾)以運行 metgrid.exe(并非必須在wrf安裝目錄下運行!!!)。 metgrid.exe 本身不支持直接通過參數或 nam…

基于 Django 進行 Python 開發

基于 Django 進行 Python 開發涉及多個方面的知識點,以下為你詳細介紹: 1. Django 基礎 項目與應用創建 借助django-admin startproject project_name來創建新的 Django 項目。利用python manage.py startapp app_name創建新的應用。項目結構 理解項目各文件和目錄的作用,像…

【sylar-webserver】8 HOOK模塊

文章目錄 知識點HOOK實現方式非侵入式hook侵入式hook ??? 覆蓋系統調用接口獲取被全局符號介入機制覆蓋的系統調用接口 具體實現C 模板成員函數繼承 和 成員函數指針類型匹配 ?????FdCtx 和 FdManager ??判斷socket的小技巧FdCtxFdManager connect hook ?do_io模板 …

SpringAI+DeepSeek大模型應用開發——1 AI概述

AI領域常用詞匯 LLM&#xff08;LargeLanguage Model&#xff0c;大語言模型&#xff09; 能理解和生成自然語言的巨型AI模型&#xff0c;通過海量文本訓練。例子&#xff1a;GPT-4、Claude、DeepSeek、文心一言、通義干問。 G&#xff08;Generative&#xff09;生成式: 根據上…

SpringBoot 基本原理

SpringBoot 為我們做的自動配置&#xff0c;確實方便快捷&#xff0c;但一直搞不明白它的內部啟動原理&#xff0c;這次就來一步步解開 SpringBoot 的神秘面紗&#xff0c;讓它不再神秘。 目錄 SpringBootApplication 背后的秘密 Configuration ComponentScan EnableAutoC…

2025.4.17總結

工作&#xff1a;今天對需求的測試設計進行了完善&#xff0c;然后&#xff0c;對測試設計進行了評審&#xff0c;最后提了個問題單。 反思這個過程&#xff0c;要說不足的地方&#xff0c;就是評審的時候總覺得自己吐字不清晰&#xff0c;表達能力早就想提升了&#xff0c;但…

2021-11-14 C++三七二十一數

緣由c編程怎么寫&#xff0c;緊急求解-編程語言-CSDN問答 void 三七二十一數() {//緣由https://ask.csdn.net/questions/7566632?spm1005.2025.3001.5141int n 0, a 0, b 0, p 1;std::cin >> n;while (n--){std::cin >> a >> b;while (a<b){if (a %…

大模型面經 | DeepSpeed中ZeRO-1、ZeRO-2和ZeRO-3的區別是什么?

大家好,我是皮先生!! 今天給大家分享一些關于大模型面試常見的面試題,希望對大家的面試有所幫助。 往期回顧: 大模型面經 | 春招、秋招算法面試常考八股文附答案(RAG專題一) 大模型面經 | 春招、秋招算法面試常考八股文附答案(RAG專題二) 大模型面經 | 春招、秋招算法…

spring boot 文件上傳

1.編寫文件上傳的表單頁面 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"> <head><meta charset"UTF-8"><meta http-equiv"Content-Type" content"text/html; charsetUTF-8&qu…

機器學習核心算法全解析:從基礎到進階的 18 大算法模型

在機器學習領域&#xff0c;算法模型是解決實際問題的核心工具。 不同的算法適用于不同的數據場景和任務需求&#xff0c;理解它們的原理與應用是掌握機器學習的關鍵。 以下將詳細解析 18 個核心算法模型&#xff0c;涵蓋監督學習、無監督學習、集成學習和深度學習等多個領域…

5G網絡切片:精準分配資源,提升網絡效率的關鍵技術

5G網絡切片&#xff1a;精準分配資源&#xff0c;提升網絡效率的關鍵技術 隨著5G技術的廣泛應用&#xff0c;網絡切片&#xff08;Network Slicing&#xff09;作為其核心創新之一&#xff0c;正在改變傳統網絡架構。它通過將物理網絡劃分為多個邏輯網絡&#xff08;切片&…

Spring Boot中Excel處理完全指南

文章目錄 1. Excel處理基礎知識1.1 為什么需要在應用中處理Excel文件&#xff1f;1.2 Java中的Excel處理庫介紹1.2.1 Apache POI1.2.2 EasyExcel1.2.3 JExcel1.2.4 Apache POI SXSSF 1.3 Spring Boot中集成Excel處理 2. 在Spring Boot中集成Excel處理庫2.1 集成Apache POI2.1.1…

Elasticsearch 8.18 中提供了原生連接 (Native Joins)

作者&#xff1a;來自 Elastic Costin Leau 探索 LOOKUP JOIN&#xff0c;這是一條在 Elasticsearch 8.18 的技術預覽中提供的新 ES|QL 命令。 很高興宣布 LOOKUP JOIN —— 這是一條在 Elasticsearch 8.18 的技術預覽中提供的新 ES|QL 命令&#xff0c;旨在執行左 joins 以進行…

2025年滲透測試面試題總結-拷打題庫03(題目+回答)

網絡安全領域各種資源&#xff0c;學習文檔&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各種好玩的項目及好用的工具&#xff0c;歡迎關注。 目錄 2025年滲透測試面試題總結-拷打題庫03 一、Windows與Linux系統提權思路 Windows提權 Linux提權 二、…

【華為】OSPF震蕩引起CPU占用率高怎么解決?

原創&#xff1a;廈門微思網絡 現象描述 如圖所示&#xff0c;Switch_1、Switch_2、Switch_3和Switch_4配置了OSPF協議&#xff0c;發現Switch_1設備的CPU占用率高&#xff0c;ROUT任務占用率明顯高于其他任務并且產生路由震蕩。 故障組網圖 原因分析 網絡中IP地址沖突導致…

Everything 安裝教程與使用教程(附安裝包)

文章目錄 前言一、Everything 介紹二、Everything 安裝教程1.Everything 安裝包下載2.選擇安裝文件3.選擇安裝語言4.接受許可協議5.選擇安裝位置6.配置安裝選項7.完成安裝 三、Everything 使用教程1.啟動軟件2.簡單關鍵詞搜索3.按類型搜索 前言 在日常使用電腦時&#xff0c;隨…

極狐GitLab CI/CD 流水線計算分鐘數如何管理?

極狐GitLab 是 GitLab 在中國的發行版&#xff0c;關于中文參考文檔和資料有&#xff1a; 極狐GitLab 中文文檔極狐GitLab 中文論壇極狐GitLab 官網 計算分鐘管理 (PREMIUM SELF) 在極狐GitLab 16.1 中&#xff0c;從 CI/CD 分鐘數重命名為計算配額或計算分鐘數。 管理員可…

Containerd 1.7.2 離線安裝與配置全指南(生產級優化)

Containerd 1.7.2 離線安裝與配置全指南&#xff08;生產級優化&#xff09; 摘要&#xff1a;本文詳細講解在無外網環境下部署 Containerd 1.7.2 容器運行時的完整流程&#xff0c;涵蓋二進制包安裝、私有鏡像倉庫配置、Systemd服務集成等關鍵步驟&#xff0c;并提供生產環境…

33-公交車司機管理系統

技術&#xff1a; 基于 B/S 架構 SpringBootMySQLvueelementui 環境&#xff1a; Idea mysql maven jdk1.8 node 用戶端功能 1.首頁:展示車輛信息及車輛位置和線路信息 2.模塊:車輛信息及車輛位置和線路信息 3.公告、論壇 4.在線留言 5.個人中心:修改個人信息 司機端功能…