【藍橋杯真題精講】第 16 屆 Python A 組(省賽)

文章目錄

    • T1 偏藍 (5'/5')
    • T2 IPv6 (0'/5')
    • T3 2025 圖形 (10'/10')
    • T4 最大數字 (10'/10')
    • T5 倒水 (15'/15')
    • T6 拼好數 (0'/15')
    • T7 登山 (20'/20')
    • T8 原料采購 (20'/20')


更好的閱讀體驗

  • 高速訪問:https://wiki.dwj601.cn/ds-and-algo/lan-qiao-cup/16th-python-a/
  • 永久鏈接:https://explorer-dong.github.io/ds-and-algo/lan-qiao-cup/16th-python-a/

官方還沒有開放評測,洛谷 開放了全部評測,但是時間限制與比賽不太一樣,往往更加嚴格,所以可能會出現洛谷過不了,但其實賽時能過的情況。

T1 偏藍 (5’/5’)

題意:定義三元組中每一位的取值范圍為 [ 0 , 255 ] [0,255] [0,255] 的整數,問有多少個三元組滿足:三元組中的第三個位置的數嚴格大于前兩個位置的數。

思路:直接三重循環遍歷一遍即可。

最終答案為: 5559680 5559680 5559680

ans = 0
for i in range(256):for j in range(256):for k in range(256):ans += (k > i) and (k > j)
print(ans)

T2 IPv6 (0’/5’)

題意:問所有的最簡 IPv6 的表示形式有多少種。

思路:不會,TODO。

T3 2025 圖形 (10’/10’)

題意:給定 h , w ( 1 ≤ h , w ≤ 100 ) h,w\ (1\le h,w\le 100) h,w?(1h,w100),按照 2 , 0 , 2 , 5 2,0,2,5 2,0,2,5 的順序循環打印一個 h h h w w w 列的字符串矩陣,同行中沒有空格。

思路:純模擬。

時間復雜度: O ( h w ) O(hw) O(hw)

h, w = tuple(map(int, input().strip().split()))a = ['2', '0', '2', '5']for i in range(h):ans = ''idx = i % 4j = 0for j in range(w):ans += a[idx]idx = (idx + 1) % 4print(ans)

T4 最大數字 (10’/10’)

題意:給定一個含有 n ( 1 ≤ n ≤ 10 4 ) n\ (1\le n\le 10^4) n?(1n104) 個數的排列,現在需要重排使得重排后的序列中所有元素「二進制拼接」后的二進制數值最大,輸出這個最大二進制數對應的十進制數。

思路:

  • 貪心題,就是自定義一個排序規則。對于 x x x y y y 兩個二進制表示,如果 x + y > y + x x+y>y+x x+y>y+x,則 x x x 要排在 y y y 的前面(加號表示字符串拼接);
  • Python 對字符串與十進制數的轉換有限制,需要手動調大。每個數的二進制最多 14 14 14 位, n n n 個數開到 150000 150000 150000 肯定可以,但這是 Python 3.11 引入的,不知道藍橋杯的評測機能不能過;
  • 力扣原題,證明。

時間復雜度: O ( n log ? n ) O(n\log n) O(nlogn)

from functools import cmp_to_key
import sys
sys.set_int_max_str_digits(150000)def cmp(x: str, y: str) -> int:if x + y > y + x:return -1  # 小于號elif x + y == y + x:return 0return 1n = int(input().strip())a = [bin(x)[2:] for x in range(1, n + 1)]
a.sort(key=cmp_to_key(cmp))print(int(''.join(a), 2))

T5 倒水 (15’/15’)

題意:給定一個含有 n ( 1 ≤ n ≤ 10 5 ) n\ (1\le n\le 10^5) n?(1n105) 個數的序列 a ( 1 ≤ a i ≤ 10 5 ) a\ (1\le a_i \le 10^5) a?(1ai?105) 和一個整數 k ( 1 ≤ k ≤ n ) k\ (1\le k\le n) k?(1kn)。現在定義一種數值轉移規則:對于第 i i i 個元素 a i a_i ai?,其可以從任意一個 j < i j < i j<i i ≡ j ( m o d k ) i\equiv j \pmod k ij(modk) 的元素中轉移一部分數值到自己身上。問經過任意次這種轉移操作后,序列最小的元素最大可以是多少。

思路:看到最大化最小元素立刻想到了二分,但是看到只能從前綴部分轉移,掃描一遍就可以了。我們分 k k k 組,每組從左往右遍歷并記錄前綴元素數量、前綴和、前綴最小值:

  • 如果當前元素比不小于前綴最小值,那么就不會影響全局最小值,不用操作;
  • 如果當前元素嚴格小于前綴最小值,那么就肯定要拿前綴的數值轉移一部分到自己身上,至于轉移多少不重要,重要的是要更新轉移后的前綴最小值。

時間復雜度: O ( n ) O(n) O(n)

n, k = tuple(map(int, input().strip().split()))
a = list(map(int, input().strip().split()))ans = max(a)
for i in range(k):cnt = 1pre = a[i]pre_min = a[i]for j in range(i + k, n, k):if a[j] >= pre_min:cnt += 1pre += a[j]continuecnt += 1pre += a[j]if pre // cnt >= pre_min:continuepre_min = pre // cntans = min(ans, pre_min)print(ans)

T6 拼好數 (0’/15’)

題意:給定一個含有 n ( 1 ≤ n ≤ 10 3 ) n\ (1\le n\le 10^3) n?(1n103) 個數的序列 a ( 0 ≤ a i ≤ 10 9 ) a\ (0\le a_i \le 10^9) a?(0ai?109)。為了最大化「數字中 6 6 6 的個數超過 6 6 6 個」的數字個數,現在可以給這些數分組(每組不超過 3 個元素)并將同一個組的數直接拼起來。問「數字中 6 6 6 的個數超過 6 6 6 個」的數字個數最大是多少。

思路:不會,TODO。

T7 登山 (20’/20’)

題意:給定一個 n n n m m m 列的矩陣 a ( 1 ≤ a i j ≤ 10 9 ) a\ (1\le a_{ij}\le 10^9) a?(1aij?109),滿足 1 ≤ n , m ≤ 10 4 , 1 ≤ n × m ≤ 10 6 1\le n,m \le 10^4,1\le n\times m \le10^6 1n,m104,1n×m106。給定在矩陣中的行走規則:可以走到同行同列中任意一個滿足「向左或向上比當前元素大的位置上」、「向右或向下比當前元素小的位置上」。計算每個格子可以到達的最大高度,輸出其均值并保留 6 6 6 位小數。

思路:直接遍歷每一個連通分量即可,可以用 DSU,也可以二次遍歷來給連通分量中每個位置標上可到達的最大值。其余實現可以參考 01 迷宮 這道題。

時間復雜度: O ( n m ( n + m ) ) O(nm(n+m)) O(nm(n+m))

=== “Python BFS”

from collections import dequen, m = tuple(map(int, input().strip().split()))
g = [list(map(int, input().strip().split())) for _ in range(n)]
ans = [[0] * m for _ in range(n)]vis = [[False] * m for _ in range(n)]def bfs(u: int, v: int):q = deque()path = []ma = -1vis[u][v] = Truepath.append((u, v))q.append((u, v))ma = max(ma, g[u][v])while q:x, y = q.popleft()for j in range(m):if j < y and g[x][j] > g[x][y] and not vis[x][j]:vis[x][j] = Truepath.append((x, j))q.append((x, j))ma = max(ma, g[x][j])if j > y and g[x][j] < g[x][y] and not vis[x][j]:vis[x][j] = Truepath.append((x, j))q.append((x, j))ma = max(ma, g[x][j])for i in range(n):if i < x and g[i][y] > g[x][y] and not vis[i][y]:vis[i][y] = Truepath.append((i, y))q.append((i, y))ma = max(ma, g[i][y])if i > x and g[i][y] < g[x][y] and not vis[i][y]:vis[i][y] = Truepath.append((i, y))q.append((i, y))ma = max(ma, g[i][y])for x, y in path:ans[x][y] = mafor i in range(n):for j in range(m):if vis[i][j]:continuebfs(i, j)s = 0
for i in range(n):for j in range(m):s += ans[i][j]print(f"{s/(n * m):.6f}")

T8 原料采購 (20’/20’)

題意:在一維坐標軸正方向上,給定一輛位于原點處的貨車,其容量為 m ( 1 ≤ m ≤ 10 9 ) m\ (1\le m\le 10^9) m?(1m109)。正方向上有從近到遠的 n ( 1 ≤ n ≤ 10 5 ) n\ (1\le n \le 10^5) n?(1n105) 個進貨源,每個進貨源都有一個進貨單價、存貨量和到原點的距離,分別記作 a , b , c ( 1 ≤ a i , b i , c i ≤ 10 9 ) a,b,c\ (1\le a_i,b_i,c_i \le 10^9) a,b,c?(1ai?,bi?,ci?109)。貨車每行駛 1 1 1 個單位花費 o o o 且無需返程。輸出進滿貨的最低成本,若沒有方案可以裝滿輸出 ? 1 -1 ?1

思路:一道比較經典的反悔貪心題,模擬的過程略復雜,但整體難度不大。初始貪心時直接選擇即可;后續反悔時,每次和之前單價更高的貨物進行置換。可以使用大根堆來維護選擇過的「貨物單價與貨物數量」。至于路費,無需在貨物置換的過程中考慮,只需在全部置換結束后再算上即可。

時間復雜度: O ( n log ? n ) O(n\log n) O(nlogn)

=== “Python”

from heapq import *MII = lambda: map(int, input().strip().split())class Site:def __init__(self, price, num, dist):self.price = priceself.num = numself.dist = distn, m, o = MII()
sites = [Site(*MII()) for _ in range(n)]def solve() -> None:# 特判if sum([site.num for site in sites]) < m:print(-1)return# 貪心val = 0  # 車上貨物價值num = 0  # 車上貨物數量i = 0    # 枚舉到的進貨點下標h = []   # [[貨物單價的負數,選擇的數量], [], ...]while i < n:choose = min(sites[i].num, m - num)if choose == 0:i -= 1breaksites[i].num -= choosenum += chooseval += choose * sites[i].priceheappush(h, [-sites[i].price, choose])i += 1# 反悔heapify(h)ans = val + sites[i].dist * owhile i < n:if sites[i].price >= -h[0][0]:i += 1continuealter_num = 0  # 第 i 個進貨源替換貨物的數量while len(h):if -h[0][0] <= sites[i].price:breakalter = min(h[0][1], sites[i].num)  # 替換量h[0][1] -= altersites[i].num -= alteralter_num += alterval -= alter * (-h[0][0] - sites[i].price)if h[0][1] == 0:heappop(h)if sites[i].num == 0:breakif alter_num:heappush(h, [-sites[i].price, alter_num])ans = min(ans, val + sites[i].dist * o)i += 1print(ans)if __name__ == "__main__":solve()

=== “C++”

#include <iostream>
#include <queue>
using namespace std;
using ll = long long;const int N = 100010;ll n, m, o;
struct Site {ll price, num, dist;
} sites[N];int main() {ios::sync_with_stdio(false);cin.tie(nullptr);ll all_num = 0;cin >> n >> m >> o;for (int i = 0; i < n; i++) {cin >> sites[i].price >> sites[i].num >> sites[i].dist;all_num += sites[i].num;}// 特判if (all_num < m) {cout << -1 << "\n";return 0;}// 貪心ll val = 0, num = 0, i = 0;priority_queue<pair<ll, ll>> h;while (i < n) {ll choose = min(sites[i].num, m - num);if (!choose) {i--;break;}num += choose;sites[i].num -= choose;val += choose * sites[i].price;h.push({sites[i].price, choose});i++;}// 反悔ll ans = val + sites[i].dist * o;while (i < n) {if (h.top().first <= sites[i].price) {i++;continue;}ll alter_num = 0;while (h.size()) {if (h.top().first <= sites[i].price) {break;}auto [price, num] = h.top();h.pop();ll alter = min(num, sites[i].num);num -= alter;sites[i].num -= alter;alter_num += alter;val -= alter * (price - sites[i].price);if (num) {h.push({price, num});}if (!sites[i].num) {break;}}if (alter_num) {h.push({sites[i].price, alter_num});ans = min(ans, val + sites[i].dist * o);}i++;}cout << ans << "\n";return 0;
}

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

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

相關文章

SpringBoot+Dubbo+Zookeeper實現分布式系統步驟

SpringBootDubboZookeeper實現分布式系統 一、分布式系統通俗解釋二、環境準備&#xff08;詳細版&#xff09;1. 軟件版本2. 安裝Zookeeper&#xff08;單機模式&#xff09; 三、完整項目結構&#xff08;帶詳細注釋&#xff09;四、手把手代碼實現步驟1&#xff1a;創建父工…

Spring的業務層,持久層,控制層的關系

在 Spring 框架中&#xff0c;控制層&#xff08;Controller&#xff09;、業務層&#xff08;Service&#xff09; 和 持久層&#xff08;Repository/Mapper&#xff09; 是分層架構的核心組成部分&#xff0c;職責分離明確&#xff0c;通過依賴注入&#xff08;DI&#xff09…

css實現不確定內容的高度過渡

實現效果&#xff1a;鼠標懸浮按鈕&#xff0c;高度過渡出現如圖所示文本框 代碼&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-widt…

計算機視覺與深度學習 | matlab實現ARIMA-WOA-CNN-LSTM時間序列預測(完整源碼和數據)

以下是一個基于MATLAB的ARIMA-WOA-CNN-LSTM時間序列預測框架。由于完整代碼較長,此處提供核心模塊和實現思路,完整源碼和數據可通過文末方式獲取。 1. 數據準備(示例數據) 使用MATLAB內置的航空乘客數據集: % 加載數據 data = readtable(airline-passengers.csv); data …

在 Excel 中使用東方仙盟軟件————仙盟創夢IDE

安裝插件 用仙盟創夢編寫插件代碼 源碼 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using ExcelDna.Integration;namespace 東方仙盟.仙盟創夢IDE_招標系統 {public static class 仙盟創夢_招標專…

Sql刷題日志(day9)

一、筆試 1、limit offset&#xff1a;分頁查詢 SELECT column1, column2, ... FROM table_name LIMIT number_of_rows OFFSET start_row; --跳過前 start_row 行&#xff0c;返回接下來的 number_of_rows 行。 2、lag、lead&#xff1a;查詢前后行數據 --lag函數用于訪問當…

C++面試3——const關鍵字的核心概念、典型場景和易錯陷阱

const關鍵字的核心概念、典型場景和易錯陷阱 一、const本質&#xff1a;類型系統的守護者 1. 與#define的本質差異 維度#defineconst編譯階段預處理替換編譯器類型檢查作用域無作用域&#xff08;全局污染&#xff09;遵循塊作用域調試可見性符號消失保留符號信息類型安全無類…

16-看門狗和RTC

一、獨立看門狗 1、獨立看門狗概述 在由單片機構成的微型計算機系統中&#xff0c;由于單片機的工作常常會受到來自外界電磁場的干擾&#xff0c;造成程序的跑飛&#xff08;不按照正常程序進行運行&#xff0c;如程序重啟&#xff0c;但是如果我們填加看門狗的技術&#xff0…

w~自動駕駛~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13269720 #FastOcc 推理更快、部署友好Occ算法來啦&#xff01; 在自動駕駛系統當中&#xff0c;感知任務是整個自駕系統中至關重要的組成部分。感知任務的主要目標是使自動駕駛車輛能夠理解和感知周圍的環境元素&…

怎么打包發布到npm?——從零到一的詳細指南

怎么打包發布到npm&#xff1f;——從零到一的詳細指南 目錄 怎么打包發布到npm&#xff1f;——從零到一的詳細指南一、準備工作1. 注冊 npm 賬號2. 安裝 Node.js 和 npm 二、初始化項目三、編寫你的代碼四、配置 package.json五、打包你的項目六、登錄 npm七、發布到 npm八、…

【C++ - 仿mudou庫one thread one loop式高并發服務器實現】

文章目錄 項目介紹項目模塊和服務器主要設計模式項目主要流程前置知識1.bind函數2.定時器任務TimerTask和時間輪思想TimerWheel3.正則表達式4.通用型容器Any類 服務器設計模式1&#xff09;單Reactor單線程模式2&#xff09;單Reactor多線程模式3&#xff09;多Reactor多線程模…

RISC-V 開發板 MUSE Pi Pro USB 測試(3.0 U盤,2.0 UVC攝像頭)

視頻講解&#xff1a; RISC-V 開發板 MUSE Pi Pro USB 測試&#xff08;3.0 U盤&#xff0c;2.0 UVC攝像頭&#xff09; 總共開發板有4個USB的A口&#xff0c;1個USB的TypeC口&#xff0c;我們插上兩個USB3.0的U盤和一個USB2.0的UVC攝像頭來進行測試 lsusb -tv 可以看到有3個US…

docker學習與使用(概念、鏡像、容器、數據卷、dockerfile等)

文章目錄 前言引入docker 簡介docker的應用場景docker的虛擬化技術VS虛擬機docker的優點docker架構Docker倉庫Docker鏡像linux操作系統的大致組成部分 Docker容器 docker安裝與啟動校驗版本移除舊的版本安裝依賴工具設置軟件源安裝docker驗證 配置鏡像加速器docker服務相關命令…

記錄一次服務器卡頓

一、服務器卡頓現象 服務用了一段時間后&#xff0c;突然很卡&#xff0c;發現在服務器上新建excel也很卡&#xff0c;發現服務器中病毒了&#xff0c;然后重新安裝了操作系統。重新安裝服務環境時&#xff0c;發現同時安裝pdf、tomcat時都很慢&#xff0c;只能一個安裝好了&am…

基于 Reactor 的 Java 高性能異步編程:響應式流與背壓詳解

本文將圍繞 Reactor 框架&#xff0c;深入剖析響應式流的核心機制&#xff0c;重點講解背壓&#xff08;Backpressure&#xff09;的實現原理與實際應用。通過理論結合實踐&#xff0c;希望幫助你真正掌握 Java 世界的響應式異步編程。 一、響應式編程與 Reactor 簡介 1.1 什么…

知識蒸餾實戰:用PyTorch和預訓練模型提升小模型性能

在深度學習的浪潮中&#xff0c;我們常常追求更大、更深、更復雜的模型以達到最先進的性能。然而&#xff0c;這些“龐然大物”般的模型往往伴隨著高昂的計算成本和緩慢的推理速度&#xff0c;使得它們難以部署在資源受限的環境中&#xff0c;如移動設備或邊緣計算平臺。知識蒸…

python:mysql全局大覽(保姆級教程)

本文目錄&#xff1a; 一、關于數據庫**二、sql語言分類**三、數據庫增刪改查操作**四、庫中表增刪改查操作**五、表中記錄插入**六、表約束**七、單表查詢**八、多表查詢**&#xff08;一&#xff09;外鍵約束**&#xff08;二&#xff09;連結查詢**1.交叉連接&#xff08;笛…

Android framework 問題記錄

一、休眠喚醒&#xff0c;很快熄屏 1.1 問題描述 機器休眠喚醒后&#xff0c;沒有按照約定的熄屏timeout 進行熄屏&#xff0c;很快就熄屏&#xff08;約2s~3s左右&#xff09; 1.2 原因分析&#xff1a; 抓取相關log&#xff0c;打印休眠背光 相關調用棧 //具體打印調用棧…

怎么利用JS根據坐標判斷構成單個多邊形是否合法

怎么利用JS根據坐標判斷構成單個多邊形是否合法 引言 在GIS(地理信息系統)、游戲開發、計算機圖形學等領域,判斷一組坐標點能否構成合法的簡單多邊形(Simple Polygon)是一個常見需求。合法多邊形需要滿足幾何學上的基本規則,本文將詳細介紹如何使用JavaScript實現這一判…

sqlite的拼接字段的方法(sqlite沒有convert函數)

我在sqlserver 操作方式&#xff1a; /// <summary>///獲取當前門店工資列表/// </summary>/// <param name"wheres">其他條件</param>/// <param name"ThisMendian">當前門店</param>/// <param name"IsNotU…