藍橋杯 之 前綴和與查分

文章目錄

  • 題目
    • 求和
    • 棋盤
    • 挖礦

  • 前綴和有利于快速求解 區間的和、異或值 、乘積等情況
  • 差分是前綴和的反操作

前綴和

  • 一維前綴和:
# 原始的數組num,下標從1到n
n = len(num)
pre = [0]*(n+1)
for i in range(n):pre[i+1] = pre[i] + num[i]
# 如果需要求解num[l] 到num[r] 的區間和
ans = pre[r] - pre[l-1]
  • 二維前綴和
# 原本的數組是n*m形狀的pre = [[0]*(m+1) for _ in range(n+1)]for i in range(n):for j in range(m):pre[i+1][j+1] = pre[i][j+1] + pre[i+1][j] - pre[i][j] + num[i][j]

前綴和的應用:

  • 當你想在一個區間進行統一的加上一個數或者減去一個數的時候,一個個操作會很慢,并且涉及多次操作的時候更新很麻煩,但是我們可以結合這個差分和前綴和進行快速求解

  • 一維:

# 在區間l到r之間同時都加上a,那么我們只需在num[l] + a,在num[r+1] -a
# 然后求解前綴和即可,就可以得到每個位置的最后的值
  • 二維:
# 1<=x1<=x2<=y1<=y2<=n
# 在x1,y1 到 x2,y2 之間都加上一個數
num[x1][y1] += a
num[x2+1]y2+1] +=a
num[x1][y2+1] -=a
num[x2+1][y1] -=a

差分:

  • 一維差分:
# 1<=l<=r<=n ,那么區間l到r之間的和值為
ans = pre[r] - pre[l-1]
  • 二維查分:
# 
ans = pre[x2][y2] - pre[x2][y1] - pre[x1][y2] + pre[x1][y1]

題目

求和

求和

在這里插入圖片描述

思路分析:

  • 首先直接暴力是肯定不行的,所以得考慮轉換?發現可以提取相同的元素,然后使用這個前綴和進行優化即可
import os
import sys# 請在此輸入您的代碼# 提取公因式,你會發現 ans = a1*(a2+···an) + a2*(a3+···an) + an-1*(an)n = int(input())
num = list(map(int,input().split()))pre = [0]*(n+1)
for i in range(n):pre[i+1] = pre[i] + num[i]ans = 0
for i in range(n-1):ans += num[i]*(pre[n]-pre[i+1])
print(ans)

棋盤

棋盤

在這里插入圖片描述

思路分析:

  • 這個題目得使用到這個二維的前綴和與查分進行優化
import os
import sys# 請在此輸入您的代碼# 其實和這個,異或操作是類似的
# 0表示白色,1表示黑色n,m = map(int,input().split())num = [[0]*(n+1) for _ in range(n+1)]for _ in range(m):x1,y1,x2,y2 = map(int,input().split())x1,y1,x2,y2 = x1-1,y1-1,x2-1,y2-1num[x1][y1] += 1num[x2+1][y2+1]     +=1num[x1][y2+1]   -=1num[x2+1][y1]   -=1# 求解二維前綴和
dp = [[0]*(n+1) for _ in range(n+1)]for i in range(n):for j in range(n):dp[i+1][j+1] = (dp[i+1][j] + dp[i][j+1] - dp[i][j] + num[i][j])%2for i in range(1, n + 1):row = "".join(str(dp[i][j]) for j in range(1, n + 1))print(row)

挖礦

挖礦

在這里插入圖片描述

思路分析:

  • 首先明確一個問題,在坐標軸上移動,最多只能轉向一次:證明,設你轉向多次之后到達左端點是 l,到達右端點的坐標是 r,如果你直接一開始不轉向,直接到達左端點l,然后再直接向后轉向右邊,那么到達的距離是肯定比r大的
import os
import sys# 請在此輸入您的代碼
n,m = map(int,input().split())
num = list(map(int,input().split()))
# 開的空間
l ,r = [0]*(m + 1),[0]*(m + 1)iszero = 0for i in num:if i > 0 and i <= m:r[i] += 1if i < 0 and abs(i) <= m:l[abs(i)] += 1if i == 0:iszero = 1# 計算出其中的左和右可以到達的位置所能得到的礦
for i in range(1,m+1):r[i] += r[i-1]l[i] += l[i-1]
ans = 0# 枚舉可以到達的端點,注意左邊和右邊
for j in range(1,m//2 + 1):ans = max(ans,r[j] + l[m-2*j],l[j] + r[m-2*j])print(ans+iszero)

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

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

相關文章

Windows10下本地搭建Manim環境

文章目錄 1. 簡介2. Python環境3. uv工具4. Latex軟件5. 安裝Manim數學庫6. 中文支持參考 1. 簡介 manim是個一科普動畫的庫&#xff0c; 本文用到的是社區版本。 2. Python環境 這個不用多說&#xff0c;可以參考其他的文章。記得把pip也安上。 3. uv工具 上面的pip是老…

#UVM# 關于field automation機制中的 pack_bytes 和unpack_bytes 函數剖析

一 pack_bytes 函數 在 UVM 中,pack_bytes 函數用于將類中的所有字段打包成一個字節流(byte stream)。這是 UVM 提供的字段自動化(field automation)機制的一部分,用于簡化數據打包和傳輸。 extern function int pack_bytes(ref byte unsigned bytestream[], input uv…

YOLOv8 自定義目標檢測

一、引言 YOLOv8 不僅支持預訓練模型的推理&#xff0c;還允許用戶將其應用于自定義對象檢測。本文將詳細介紹如何使用 YOLOv8 訓練一個新的模型&#xff0c;并在自定義數據集上進行對象檢測。 二、數據集準備 1. 數據集格式 YOLOv8 支持多種數據集格式&#xff0c;包括 CO…

關于tresos Studio(EB)的MCAL配置之GPT

概念 GPT&#xff0c;全稱General Purpose Timer&#xff0c;就是個通用定時器&#xff0c;取的名字奇怪了點。定時器是一定要的&#xff0c;要么提供給BSW去使用&#xff0c;要么提供給OS去使用。 配置 General GptDeinitApi控制接口Gpt_DeInit是否啟用 GptEnableDisable…

Dify 開源大語言模型應用開發平臺使用(一)

文章目錄 一、創建鋰電池專業知識解答應用1.1 應用初始化 二、核心功能模塊詳解2.1 知識庫構建2.2 工作流與節點編排節點類型說明工作流設計示例&#xff1a;鋰電池選型咨詢 2.3 變量管理 三、測試與調試3.1 單元測試3.2 壓力測試3.3 安全驗證 四、部署與優化建議4.1 部署配置4…

《Java基礎 聊天窗口案例:剖析 GUI、文件 I/O 等關鍵技術知識》

1. 面向對象編程 類與對象&#xff1a;代碼中定義了 Chat 類&#xff0c;它是整個程序的核心&#xff0c;封裝了與聊天窗口相關的屬性和方法。在 main 方法中創建了 Chat 類的對象&#xff0c;并調用其方法來完成相應的功能。繼承與多態&#xff1a;ButtonClickListener 類實現…

IDE集成開發環境MyEclipse中安裝SVN

打開Myeclipse的help菜單----install from site 點擊add彈出對話框 在輸入框中輸入對應內容 http://subclipse.tigris.org/update_1.10.x 點擊OK之后&#xff0c;會刷新出兩個選項&#xff0c;需要選中的 點擊next&#xff0c;出現許可的時候選中同意&#xff0c;一直結束等…

歸并排序:分治哲學的完美演繹與時空平衡的藝術

引言&#xff1a;跨越世紀的算法明珠 在計算機科學的璀璨星河中&#xff0c;歸并排序猶如一顆恒久閃耀的明星。1945年&#xff0c;現代計算機之父馮諾伊曼在EDVAC計算機的研發過程中首次系統性地提出了這一算法&#xff0c;其精妙的分治思想不僅奠定了現代排序算法的理論基礎&…

服務器CPU微架構

1、微架構圖 前端&#xff1a;預解碼、解碼、分支預測、L1指令緩存、指令TLB緩存 后端&#xff1a;順序重排緩存器ROB處理依賴&#xff0c;調度器送到執行引擎 執行引擎&#xff1a;8路超標量&#xff0c;每一路可以進行獨立的微操作處理 Port0、1、5、6支持整數、浮點數的加…

SpringBoot調用DeepSeek

引入依賴 <dependency><groupId>io.github.pig-mesh.ai</groupId><artifactId>deepseek-spring-boot-starter</artifactId><version>1.4.5</version> </dependency>配置 deepseek:api-key: sk-******base-url: https://api.…

【前端基礎】Day 9 PC端品優購項目

目錄 1. 品優購項目規劃 1.1 網站制作流程 1.2 品優購項目整體介紹 1.3 學習目的 1.4 開發工具以及技術棧 1.5 項目搭建工作 1.6 網站favicon圖標 1.7 網站TDK三大標簽SEO優化 2. 品優購首頁制作 2.1 常見模塊類命名 2.2 快捷導航shortcut制作 2.3 header制作 2.4…

OpenMCU(一):STM32F407 FreeRTOS移植

概述 本文主要描述了STM32F407移植FreeRTOS的簡要步驟。移植描述過程中&#xff0c;忽略了Keil軟件的部分使用技巧。默認讀者熟練使用Keil軟件。本文的描述是基于OpenMCU_FreeRTOS這個工程&#xff0c;該工程已經下載放好了移植stm32f407 FreeRTOS的所有文件 OpenMCU_FreeRTOS工…

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo

NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo NetBeans 8.2 開發 CIFLog3.5 - 創建WelcomeDemo創建一個基于CIFLog平臺的應用系統1. 下載安裝CIFLog2. 授權使用3. 解決本地機器碼驗證錯誤問題4. 創建一個基于CIFLog平臺的應用系統&#xff08;1&#xff09;新建項目&#xf…

ESP8266連接網絡實時上傳數據

要實現這個功能,可以按照以下步驟進行編程。我們將使用Arduino IDE來編寫代碼,并結合ESP8266的WiFi庫、MQTT庫以及Web服務器庫來實現。 1. 準備工作 硬件:ESP8266開發板、溫度傳感器(如DS18B20)、顯示屏(如OLED)。軟件:Arduino IDE、ESP8266庫、PubSubClient庫(MQTT)…

pytest中pytest.ini文件的使用

pytest.ini 是 pytest 測試框架的配置文件,它允許你自定義 pytest 的行為。通過在 pytest.ini 中設置各種選項,可以改變測試用例的發現規則、輸出格式、插件行為等。以下詳細介紹 pytest.ini 文件的使用。 1. 文件位置 pytest.ini 文件通常位于項目的根目錄下,pytest 在運…

MARL零樣本協調之Fictitious Co-Play學習筆記

下列引用來自知乎作者Algernon 知乎link FCP作為ZSC領域兩階段訓練方法的開創者 論文《Collaborating with Humans without Human Data》來自 NeurIPS 2021。這篇論文提出 Fictitious Co-Play (FCP) 來解決 ZSC 問題。論文認為&#xff0c;ZSC 的第一個重要問題是對稱性&#x…

Docker小游戲 | 使用Docker部署DOS游戲合集

Docker小游戲 | 使用Docker部署DOS游戲合集 前言項目介紹項目簡介項目預覽二、系統要求環境要求環境檢查Docker版本檢查檢查操作系統版本三、部署dos-games網頁小游戲下載鏡像創建容器檢查容器狀態檢查服務端口檢查容器日志安全設置四、訪問DOS游戲網頁五、進階玩法下載游戲拷貝…

SpringBoot-模擬SSE對話交互

SpringBoot-模擬SSE對話交互 后端使用SSE進行會話&#xff0c;前端使用Html模擬大模型的問答交互->【前端】【后端】 1-學習目的 本項目代碼倉庫&#xff1a;https://gitee.com/enzoism/springboot_sse 1-核心知識點 1&#xff09;什么是SSE協議->客戶端發起一次請求&am…

2025 ubuntu24.04系統安裝docker

1.查看ubuntu版本&#xff08;Ubuntu 24.04 LTS&#xff09; rootmaster:~# cat /etc/os-release PRETTY_NAME"Ubuntu 24.04 LTS" NAME"Ubuntu" VERSION_ID"24.04" VERSION"24.04 LTS (Noble Numbat)" VERSION_CODENAMEnoble IDubun…

Avalonia 中文亂碼

代碼字體文件設置成支持中文的&#xff0c;但是編譯的代碼還是顯示的亂碼&#xff0c;原因是代碼文件的文件編碼格式不支持中文導致的。 如下面的2個頁面一部分中文顯示正常&#xff0c;一部分顯示正常&#xff0c;一部分顯示亂碼。