第十四屆藍橋杯大賽軟件賽省賽C/C++ 大學 B 組(部分題解)

文章目錄

  • 前言
  • 日期統計
    • 題意:
  • 冶煉金屬
    • 題意:
  • 島嶼個數
    • 題意:
  • 子串簡寫
    • 題意:
  • 整數刪除
    • 題意:
  • 總結

前言

一年一度的🏀杯馬上就要開始了,為了取得更好的成績,好名字寫了下前年2023年藍橋杯的省賽真題,感覺題目還不錯(好難)為此來寫篇博客重溫一下這幾個題。也可以幫助一下第一次參加藍橋杯的新手小白更好沖擊省一。
2023年的題目感覺比我們2024年的題目難(還好我不是去年參加的),不過🏀杯聲名遠揚,打打暴力可能就能獲獎省一,從此成為同學眼中的“大神”。
只寫了5個題,剩下的再看看。。。

日期統計

題意:

在這里插入圖片描述
直接上圖片吧,節省時間。
這題一看就非常簡單了,畢竟作為第一題肯定不會太難。寫出來第一題估計就能省三到省二區間了,大家也可以移步去看看。24年的第一題(更簡單)
我們直接暴力打表,六七層循環跑出來,但是要注意其中的細節,這題就是考細節了。
代碼就不展示了,好名字的代碼找不到了,反正就是這樣,然后再那樣,相信你們都懂。
最后得到的答案是235
這題so easy ,必須確保拿下。

冶煉金屬

題意:

在這里插入圖片描述
在這里插入圖片描述
這是一個數學+二分的題目。我們可以知道
75 ? 20 = 3 75?20=3 75?20=3
75 ? 21 = 3 75?21=3 75?21=3
75 ? 22 = 3 75?22=3 75?22=3
。。。看下來我們可以知道75除以一個區間的數字都是可以等于3,所以對于每一組數據,我們都有一個區間的值符合要求,那么我們可以求出來每一個數據的區間,最后對他們取∩,我們就可以得到最小值,再進行一次取∩我們可以得到最大值。這是二分答案的寫法。不會二分答案的同學,可以移步這里。
我看有人用數學的方法也可以寫,這里就不做演示了。
這個題在我去年打藍橋杯的時候就寫過博客,大家可以進我主頁看看。給朱波點點關注

int n;
vector<int>a,b;void Solve () {cin>>n;a.resize(n+1);b.resize(n+1);//vector容器的重構大小for (int i=1;i<=n;i++) {cin>>a[i]>>b[i];}int left =-1e9,right=1e9;for (int i=1;i<=n;i++) {int l = 1,r = 1e9;while (l<r) {int mid = l+r>>1;if (a[i]/mid<=b[i]) r = mid;else l = mid+1;}left = max(left,l);}for (int i=1;i<=n;i++) {int l = 1,r = 1e9;while (l<r) {int mid = l+r+1>>1;if (a[i]/mid>=b[i]) l = mid;else r = mid-1;}right = min(right,l);}//兩次二分cout<<left<<' '<<right;return ;
}

這題可以搞,easy。

島嶼個數

題意:

在這里插入圖片描述
在這里插入圖片描述
大眼一看主播就知道這是一個搜索題,不過子島嶼的存在讓主播有些許的頭疼,不過利用瞪眼法我們可以知道,如果一個島嶼外面的海洋是公共的海洋,那么這個島嶼就沒有被包圍,這個島嶼就不是子島嶼。
所以,我們可以先DFS一遍外海洋,全部標記一遍,再利用這類題的傳統解法。??我們題目給出的邊界之外全部都是海洋,所以我們可以自己處理一下,像這樣
在這里插入圖片描述
然后附上代碼

char a[100][100];
int n,m;
int dx[]={0,0,1,-1,-1,1,-1,1},dy[]={1,-1,0,0,1,1,-1,-1};
int vis1[100][100],vis2[100][100];
int f = 0;
void dfs1 (int x,int y) {for (int i=0;i<8;i++) {int nx = x+dx[i],ny = y+dy[i];if (nx<0||nx>n+1||ny<0||ny>m+1||vis1[nx][ny]||a[nx][ny]=='1') continue;vis1[nx][ny] = 1;dfs1(nx,ny);}
}void dfs2 (int x,int y) {for (int i=0;i<4;i++) {int nx = x+dx[i],ny = y+dy[i];if (nx<0||nx>n+1||ny<0||ny>m+1||vis2[nx][ny]) continue;		if (vis1[nx][ny]==1) f =1;	if (a[nx][ny]=='1'){vis2[nx][ny] = 1;dfs2(nx,ny);}	}
}void Solve () {cin>>n>>m;memset(vis1,0,sizeof vis1);memset(vis2,0,sizeof vis2);for (int i=1;i<=n;i++) {for (int j=1;j<=m;j++) {cin>>a[i][j];}}for (int i=0;i<=n+1;i++) {for (int j=0;j<=m+1;j++) {if (i==0||i==n+1||j==0||j==m+1) a[i][j] = '0';}}vis1[0][0]=1;dfs1(0,0);int ans = 0;for (int i=1;i<=n;i++) {for (int j=1;j<=m;j++) {if (a[i][j]=='1' && vis2[i][j]==0) {vis2[i][j]=1;f = 0;dfs2 (i,j);if (f) {ans++;}}}}cout<<ans<<'\n';return ;
}

注意記得初始化,主播因為沒有初始化一開始,看了半天不知道哪里出錯了,這是個多實例!!!
這個題也不難,不過OI賽制下可能寫搜索題可能不太友好。說不定就差一個字母,這個題都沒分。

子串簡寫

題意:

在這里插入圖片描述
在這里插入圖片描述
這一題找有多少符合條件的子串,并且要求這個子串的長度不能小于k,這個子串的首尾兩個字母要和樣例給出的一樣,我們發現當我們在某處符合條件再往后找的時候,但凡出現字符b都是符合條件的。
舉個例子:

首字母為a,尾字母為b,長度為4)
adcb這個答案顯然為1
adcbb這個就是2
adcbbbbb這個就是5
aadcbbbbb這個就是10

我們可以看出,這顯然和前綴和有關,所以我們思考一下,就可以知道,這個和前綴和其實沒啥關系,但是和后綴和關系就大了,我們對串預處理一下,出現b的位置標為1,否則就是0。
然后用后綴和相加起來,我們可以輸出一下這個后綴和看下,以樣例為例

4 4 3 3 2 2 1 1

而后我們遍歷這個串,從出現a的位置往后找k位,用后綴和快速找到后面有多少b,就是這個位置往后有多少符合條件的解,最后全部加起來就是答案。

void Solve () {int k;cin>>k;string s;cin>>s;s = " "+s;int t = s.size();vector<int>x(t+2);char a,b;cin>>a>>b;for (int i=1;s[i];i++) {if (s[i]==b) x[i] = 1;else x[i] = 0;}for (int i=t-1;i>=1;i--) {x[i] = x[i+1]+x[i];}int ans = 0;for (int i=1;i<s.size()-k+1;i++) {if (s[i]==a) {ans+=x[i+k-1];}}cout<<ans<<'\n';return ;
}

這個題賽時可以全寫完,不難。

整數刪除

題意:

在這里插入圖片描述
在這里插入圖片描述
這一題真的是挺不容易的,難度我覺得在CF1400+,主要就是對于小根堆的處理。不知道大小根堆的人有難了。還是去看下大小根堆的介紹理解一下吧。
每次刪除一個最小數,我們很容易就能想到是小根堆的利用,但是本題會讓其他數字也發生變化,我們又不能對于小根堆里面的數字進行更改,怎么辦呢?
不能改我們就不改了嘛,我們用一個數組存一下每個位置改變的值,當要刪除這個數字的時候,看看你會不會被前面刪除的數字影響,就比如1,2,3我們先刪除1,那么下一個2就會受影響變成3。同時如果是2 1 3的話,我們刪除1,這時2的右領居和3的左領居就會發生變化,我們下次變化的時候就要進行調整。
所以我們要對于每一個數字的左右領居進行維護,然后用一個cnt數組記錄每個位置的變化情況。
最后對于小根堆不停的刪除最小的數字,當這個即將刪除的數字會被之前的刪除的數字影響,我們就push這個數字加上cnt的值放進小根堆里面。(小根堆還會自動排序,太好用了!)再進行判斷。
最后輸出就行了,看下代碼。

priority_queue<PII,vector<PII>,greater<PII>>q;//用pair開小根堆記錄這個值,和位置
void Solve () {int n,k;cin>>n>>k;vector<int>l(n+10),r(n+10);for (int i=1;i<=n;i++) {int x;cin>>x;q.push({x,i});l[i] = i-1;r[i] = i+1;}vector<int>cnt(n+10,0);   while (k--) {int x = q.top().fi;int id = q.top().se;q.pop();    if (cnt[id]) {q.push({x+cnt[id],id});k++;//重新放進去再進行判斷,所以k++cnt[id] = 0;}else {int le = l[id],ri = r[id];cnt[le] += x;cnt[ri] += x;r[le] = ri; l[ri] = le;//變化id這個位置的左右鄰居}}map<int,int>mp;while (q.size()) {int x = q.top().fi;int y = q.top().se;q.pop();mp[y] += (x+cnt[y]);}for (auto t : mp) cout<<t.se<<' ';    return ;
}

注意數組要開大一點,不然就會像我一樣WA好幾發(藍橋杯賽場就炸缸了)
感覺這一題挺好的,可以細細斟酌一下。

總結

藍橋杯不用想著把正解搞出來,其實暴力跑跑已經可以超過絕大部分人了(在弱省),好好備戰,補藥讓300塊打水漂。

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

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

相關文章

處理JWT Token失效需求

JWT 本身是無狀態的&#xff0c;這意味著服務器不會保存任何關于 Token 的狀態信息。但為了支持 JWT 的狀態管理&#xff08;例如&#xff1a;強制使某些 Token 失效&#xff09;&#xff0c;可以借助 Redis 這樣的外部存儲來維護一個黑名單或白名單。 安裝必要的 NuGet 包 首…

PHP代碼審計-01

&#x1f338; 連接方式 PHP Mysql連接方式&#xff1a; Mysql&#xff08;廢棄&#xff09;MysqliPDO &#x1f338; 常見過濾 intval/addslashes/mysql_real_escape mysqli_escape_string/mysqli_real_escape_string/mysqli::escape_string PDO::quote 參數化查詢 a…

SpringKafka錯誤處理:重試機制與死信隊列

文章目錄 引言一、Spring Kafka錯誤處理基礎二、配置重試機制三、死信隊列實現四、特定異常的處理策略五、整合事務與錯誤處理總結 引言 在構建基于Kafka的消息系統時&#xff0c;錯誤處理是確保系統可靠性和穩定性的關鍵因素。即使設計再完善的系統&#xff0c;在運行過程中也…

藍橋杯2024JavaB組的一道真題的解析

文章目錄 1.問題描述2.問題描述3.思路分析4.代碼分析 1.問題描述 這個是我很久之前寫的一個題目&#xff0c;當時研究了這個題目好久&#xff0c;發布了一篇題解&#xff0c;后來很多人點贊&#xff0c;我都沒有意識到這個問題的嚴重性&#xff0c;我甚至都在懷疑自己&#xf…

性能比拼: Go標準庫 vs Python FastAPI(第二輪)

本內容是對知名性能評測博主 Anton Putra Python (FastAPI) vs Go (Golang) (Round 2) Performance Benchmark 內容的翻譯與整理, 有適當刪減, 相關指標和結論以原作為準 介紹 這是第二輪關于 FastAPI 和 Golang 的對比測試。我幾天前運行了前一次的基準測試&#xff0c;到目…

DeepSeek與ChatGPT的優勢對比:選擇合適的工具來提升工作效率

選DeepSeek還是ChatGPT&#xff1f;這就像問火鍋和披薩哪個香&#xff01; "到底該用DeepSeek還是ChatGPT?” 這個問題最近在互聯網圈吵翻天!其實這就跟選手機系統-樣&#xff0c;安卓黨iOS黨都能說出一萬條理由&#xff0c;但真正重要的是你拿它來干啥&#xff01;&am…

Python爬蟲第4節-請求庫urllib的request模塊使用

目錄 前言&#xff1a;基本庫urllib的使用 一、urlopen方法 二、Request類 三、高級用法 前言&#xff1a;基本庫urllib的使用 開始學習爬蟲時&#xff0c;第一步就是要模擬瀏覽器給服務器發送請求。這個時候&#xff0c;你可能會有很多問題&#xff1a;該從哪里開始做呢&a…

Vue3 Pinia Store使用示例

代碼示例&#xff1a; import { defineStore } from "pinia"; // 導入 Pinia 的 defineStore 方法 import { ref } from "vue"; // 導入 Vue 的響應式 API ref import { type Menu } from "/interface"; // 導入自定義的 Menu 類型/…

JavaScript逆向魔法:Chrome開發者工具探秘之旅

在前端開發和安全研究領域&#xff0c;JavaScript逆向工程是一項關鍵技能。它涉及分析和理解代碼的執行流程、數據結構和邏輯&#xff0c;以發現潛在的安全漏洞、提取核心算法或實現功能兼容。本文將結合Chrome開發者工具的調試功能&#xff0c;并通過具體示例幫助你更好地理解…

Qt基礎:資源文件

資源文件 1. 資源文件2. 資源文件創建 1. 資源文件 資源文件顧名思義就是一個存儲資源的文件&#xff0c;在Qt中引入資源文件好處在于他能提高應用程序的部署效率并且減少一些錯誤的發生。 在程序編譯過程中&#xff0c; 添加到資源文件中的文件也會以二進制的形式被打包到可執…

Agent TARS與Manus的正面競爭

Agent TARS 是 Manus 的直接競爭對手&#xff0c;兩者在 AI Agent 領域形成了顯著的技術與生態對抗。 一、技術架構與功能定位的競爭 集成化架構 vs 模塊化設計 Agent TARS 基于字節跳動的 UI-TARS 視覺語言模型&#xff0c;將視覺感知、推理、接地&#xff08;grounding&#…

使用ssh連接上開發板

最后我發現了問題&#xff0c;我忘記指定用戶名了&#xff0c;在mobaXterm上左上角打開會話&#xff0c;點擊ssh&#xff0c;然后輸入要連接的開發板主機的ip地址&#xff0c;關鍵在這里&#xff0c;要指定你要連接的開發板的系統中存在的用戶&#xff0c;因為通過ssh連接一個設…

【性能優化點滴】odygrd/quill在編譯期做了哪些優化

Quill 是一個高性能的 C 日志庫&#xff0c;它在編譯器層面進行了大量優化以確保極低的運行時開銷。以下是 Quill 在編譯器優化方面的關鍵技術和實現細節&#xff1a; 1. 編譯時字符串解析與格式校驗 Quill 在編譯時完成格式字符串的解析和校驗&#xff0c;避免運行時開銷&…

【數據結構】排序算法(中篇)·處理大數據的精妙

前引&#xff1a;在進入本篇文章之前&#xff0c;我們經常在使用某個應用時&#xff0c;會出現【商品名稱、最受歡迎、購買量】等等這些榜單&#xff0c;這里面就運用了我們的排序算法&#xff0c;作為剛學習數據結構的初學者&#xff0c;小編為各位完善了以下幾種排序算法&…

混雜模式(Promiscuous Mode)與 Trunk 端口的區別詳解

一、混雜模式&#xff08;Promiscuous Mode&#xff09; 1. 定義與工作原理 定義&#xff1a;混雜模式是網絡接口的一種工作模式&#xff0c;允許接口接收通過其物理鏈路的所有數據包&#xff0c;而不僅是目標地址為本機的數據包。工作層級&#xff1a;OSI 數據鏈路層&#x…

大學生機器人比賽實戰(一)綜述篇

大學生機器人比賽實戰 參加機器人比賽是大學生提升工程實踐能力的絕佳機會。本指南將全面介紹如何從零開始準備華北五省機器人大賽、ROBOCAN、RoboMaster等主流機器人賽事&#xff0c;涵蓋硬件設計、軟件開發、算法實現和團隊協作等關鍵知識。 一、比賽選擇與準備策略 1.1 主…

【Linux】動靜態庫知識大梳理

親愛的讀者朋友們&#x1f603;&#xff0c;此文開啟知識盛宴與思想碰撞&#x1f389;。 快來參與討論&#x1f4ac;&#xff0c;點贊&#x1f44d;、收藏?、分享&#x1f4e4;&#xff0c;共創活力社區。 在 Linux 系統編程中&#xff0c;動靜態庫是重要的組成部分&#xff0…

06-公寓租賃項目-后臺管理-公寓管理篇

尚庭公寓項目/公寓管理模塊 https://www.yuque.com/pkqzyh/qg2yge/5ba67653b51379d18df61b9c14c3e946 一、屬性管理 屬性管理頁面包含公寓和房間各種可選的屬性信息&#xff0c;其中包括房間的可選支付方式、房間的可選租期、房間的配套、公寓的配套等等。其所需接口如下 1.1…

Links for llama-cpp-python whl安裝包下載地址

Links for llama-cpp-python whl安裝包下載地址 Links for llama-cpp-python whl安裝包下載地址 https://github.com/abetlen/llama-cpp-python/releases

為境外組織提供企業商業秘密犯法嗎?

企業商業秘密百問百答之九十六&#xff1a;為境外組織提供企業商業秘密犯法嗎&#xff1f; 在日常的對外交流中&#xff0c;企業若暗中為境外的機構、組織或人員竊取、刺探、收買或非法提供商業秘密&#xff0c;這種行為嚴重侵犯了商業秘密權利人的合法權益&#xff0c;更深遠…