第十四屆藍橋杯青少年組省賽 編程題真題題解

明天我就要考藍橋杯省賽了,本蒟蒻已瑟瑟發抖,所以現在寫一篇文章。

題目分別為:

1.??????B4270 [藍橋杯青少年組省賽 2023] 特殊運算符

2.B4271 [藍橋杯青少年組省賽 2023] 四葉玫瑰數

3.B4272 [藍橋杯青少年組省賽 2023] 質因數的個數

4.B4273 [藍橋杯青少年組省賽 2023] 最大的矩形紙片

……(本人只講解前四道題,后兩道是藍題,不會做了)

題解開始:

第一題:

題目描述

假定有一個運算符?>>>,它的功能如下所示:

>>>?257=25>>>?182=18>>>?933=93

給定一個正整數?N(100<N<1000),請計算?N?(>>>?N)?的結果。

例如:N=257?時,257?(>>>?257)=257?25=232。

輸入格式

輸入一個正整數?N(100<N<1000)。

輸出格式

輸出一個整數,表示?N?(>>>?N)?的結果

輸入輸出樣例

輸入 #1復制

257

輸出 #1復制

232

這道題十分簡單,這里不多說,直接上AC代碼:

#include<bits/stdc++.h>
using namespace std;
int n;
int main(){cin>>n;cout<<n-(n/100*10+n/10%10);return 0;
}

時間復雜度:O(1)

第二題:

題目描述

四葉玫瑰數是指一個四位數,其各位上的數字的四次方之和等于本身。

給定兩個正整數?N?和?M?,請將?N~M(1≤N≤M≤1000000)?之間(含?N?和?M)的四葉玫瑰數按從小到大的順序輸出。

例如:N=1234,M=2345?時,有一個四葉玫瑰數?1634,因為?14+64+34+44=1634,故輸出?1634。

輸入格式

第一行輸入兩個正整數?N,M(1≤N≤M≤1000000)。

輸出格式

輸出一行,包含若干個用一個空格隔開的正整數,表示?N~M?之間的四葉玫瑰數按從小到大的順序的輸出結果。

題目數據保證給定的?N~M?范圍內至少有一個四葉玫瑰數

輸入輸出樣例

輸入 #1復制

1234 2345

輸出 #1復制

1634

這道題照樣簡單,先寫一個for循環,從N開始到M結束。每一次for循環,都求出各個數位的4次方之和,最后判斷一下是否等于i就行了。上AC代碼:

#include<bits/stdc++.h>
using namespace std;
int n,m;
int main(){cin>>n>>m;int sum=0;for(int i=n;i<=m;i++){if(i<=999||i>9999) continue;int t=i;sum=pow(i/1000,4)+pow(i/100%10,4)+pow(i/10%10,4)+pow(i%10,4);if(sum==t) cout<<sum<<' ';}return 0;
}

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

第三題:

題目背景

  • 因數:又稱為約數,如果整數?a?除以整數?b(b=0)?的商正好是整數而沒有余數,我們就說?b?是?a?的因數。
  • 質數:又稱為素數,一個大于?1?的自然數,除了?1?和它自身外,不能被其他自然數整除的數叫做質數。2?是最小的質數。
  • 質因數:如果一個數?a?的因數?b?同時也是質數,那么?b?就是?a?的一個質因數,例如:8=2×2×2,2?就是?8?的質因數;12=2×2×3,2?和?3?就是?12?的質因數。

題目描述

給定兩個正整數?N?和?M(1≤N≤M≤107),統計?N?到?M?之間(含?N?和?M)每個數所包含的質因數的個數,輸出其中最大的個數。

例如: 當?N=6,M=10,6?到?10?之間:

  • 6?的質因數是?2,3,共有?2?個;
  • 7?的質因數是?7,共有?1?個;
  • 8?的質因數是?2,2,2,共有?3?個;
  • 9?的質因數是?3,3,共有?2?個;
  • 10?的質因數是?2,5,共有?2?個;

6?到?10?之間的數中質因數最多的是?8,質因數有?3?個,故輸出?3。

輸入格式

輸入兩個正整數?N?和?M(1≤N≤M≤107),兩個正整數之間用一個空格隔開。

輸出格式

輸出一個整數,表示質因數個數中的最大值。

輸入輸出樣例

輸入 #1復制

6 10

輸出 #1復制

3

這道題有兩種做法:

第一種:暴力

代碼:

#include<bits/stdc++.h>
using namespace std;
vector<int> gp(int x){vector<bool> p(x+1,true);p[0]=p[1]=false;for(int i=2;i<=sqrt(x);i++){if(p[i]){for(int j=i*i;j<=x;j+=i){p[j]=false;}}}vector<int> pp;for(int i=2;i<=x;i++){if(p[i]){pp.push_back(i);}}return pp;
}
int zys(int num,const vector<int>& pp){int cnt=0;for(int p:pp){if(p*p>num) break;if(num%p==0){while(num%p==0){num/=p;cnt++;}}}if(num>1){cnt++;}return cnt;
}
int main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n,m;cin>>n>>m;vector<int> ppp=gp(m);int maxx=0;for(int i=n;i<=m;i++){int c=zys(i,ppp);if(c>maxx){maxx=c;}}cout<<maxx;return 0;
}

但是只得90分,要想進入國賽,這道題必須拿下(除非你會做后面3題)。所以:

第二種做法:DP優化

代碼:

#include<bits/stdc++.h>
using namespace std;
int n,m,dp[10000005],ans=0;
bool vis[10000005];
int main(void){cin>>n>>m;for(int i=2;i<=m;i++){if(vis[i]) continue;dp[i]=1;for(int j=2;j<=m/i;j++){vis[i*j]=true;dp[i*j]=dp[j]+1;}}for(int i=n;i<=m;i++){ans=max(ans,dp[i]);}cout<<ans;return 0;
}

時間復雜度:O(m log m)

第四題:

題目描述

一張半邊參差不齊的網格紙(網格邊長均為?1),有一邊是完整沒有破損的。現要從中剪出一片面積最大的矩形紙片。

給定網格紙中完整邊的長度?N(1≤N≤1000000),以及網格中每一列殘存部分的高度(1≤?高度?≤10000),輸出能夠剪出的最大矩形紙片面積。

輸入格式

第一行輸入一個正整數?N(1≤N≤1000000),表示紙片完整邊的長度。

第二行輸入?N?個正整數(1≤?正整數?≤10000),表示每列格子殘存部分的高度,兩個正整數之間用一個空格隔開。

輸出格式

輸出一個正整數,表示能夠剪出的最大矩形紙片面積。

輸入輸出樣例

輸入 #1復制

6
3 2 1 4 5 2

輸出 #1復制

8

先讀題,給定?n?個寬為?1?的矩形,每個矩形的高各不相同。將它們拼在一起,要求在從中剪出一塊最大的矩形紙片。
我們很自然可以想到枚舉左右起始位置,在枚舉中間的位置來計算當前區間內的最大矩形長度,再來更新答案。

#include<bits/stdc++.h>
using namespace std;
int h[1000001];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>h[i];}int maxn=0;for(int i=1;i<=n;i++){int m=1e9+1;for(int j=i;j<=n;j++){for(int k=i;k<=j;k++){m=min(m,h[k]);} maxn=max(maxn,m*(j-i+1));}}cout<<maxn<<endl;return 0;
}

結果……30?分
我們可以發現該解法的時間復雜度為?O(n3)。 所以我們得換一種方法來寫。 我們可以先假設矩形長度遞增,那么我們該如何做?
很顯然,我們可以嘗試將當前的矩形的高度作為最后矩形的高度,并將該矩形的寬一直延伸到右邊界,再算出矩形的面積用來更新答案。
所以我們看回這道題,我們可以利用上面的結論,如果下一個矩形的高度比上一個小,那么該矩形想與前面的矩形拼成一個更大的矩形,那么之前的矩形高于當前矩形的面積就沒有任何用處了(如下圖中打叉的部分)。

所以我們就可以用到一種算法來解決這種問題————單調棧
我們只需要建立一個棧,用來維護一個高度始終單調的序列,這樣我們就可以解決這個問題了。
我們先從左到右依次掃描每個矩形,如果當前的矩形高度高于棧頂矩形,就讓其進棧;否則就不斷取出棧頂,直至棧為空或棧頂矩形的高度比當前矩形小。出棧過程中我們累加彈出矩形的寬度,并且在每次彈出時,就用其高度乘以累加的寬度去更新答案。出棧結束后,我們再把一個高度為當前矩形高度、寬度為累加值的矩形入棧。注意,結束后,要將棧中剩下的矩形依次彈出,采用上面相同的方法來更新答案。所以我們可以增加一個高度為?0?的矩形,避免再掃描結束后有剩余矩形。

AC代碼1——數組模擬:

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a[1000001];
int s[1000001];
int w[1000001];
int n;
signed main(){int p=0,ans=0;cin>>n;for(int i=1;i<=n;i++) cin>>a[i]; a[n+1]=0; for(int i=1;i<=n+1;i++){if(a[i]>s[p]){s[++p]=a[i];w[p]=1;}else{int width=0;while(s[p]>a[i]){width+=w[p];ans=max(ans,(long long)width*s[p]);p--;}s[++p]=a[i];w[p]=width+1;}}cout<<ans<<endl;return 0;
}

AC代碼2——STL:

#include<bits/stdc++.h>
using namespace std;
struct node{int h,w;
};
stack<node>s;
long long a[1000001];
long long ans=0;
int main(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i];a[n+1]=0;for(int i=1;i<=n+1;i++){long long width=0;while(!s.empty() && a[i]<s.top().h){//單調遞增width=width+s.top().w;ans=max(ans,width*s.top().h);s.pop();}s.push( (node){a[i],width+1} );}cout<<ans<<endl;return 0;
}

好了寶子們,今天的題解就到這里,我們明天再會!

制作不易,點個關注再走叭!

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

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

相關文章

HTML全景效果實現

我將為您創建一個精美的360度全景效果頁面&#xff0c;使用Three.js庫實現沉浸式全景體驗&#xff0c;并提供用戶友好的控制界面&#xff0c;完整代碼看文章末尾。 設計思路 使用Three.js創建全景球體 添加控制面板用于切換不同場景 實現自動旋轉和手動控制選項 添加加載狀…

Python 屬性描述符(描述符用法建議)

描述符用法建議 下面根據剛剛論述的描述符特征給出一些實用的結論。 使用特性以保持簡單 內置的 property 類創建的其實是覆蓋型描述符&#xff0c;__set__ 方法和 __get__ 方法都實現了&#xff0c;即便不定義設值方法也是如此。特性的 __set__ 方法默認拋出 AttributeError: …

Milvus 向量數據庫內存使用相關了解

1、支持 MMap 的數據存儲在 Milvus 中&#xff0c;內存映射文件允許將文件內容直接映射到內存中。這一功能提高了內存效率&#xff0c;尤其是在可用內存稀缺但完全加載數據不可行的情況下。這種優化機制可以增加數據容量&#xff0c;同時在一定限度內確保性能&#xff1b;但當數…

C++編程之旅-- -- --默認成員函數(全詳解)

目錄前言構造函數構造函數形式&#xff1a;構造函數的特性&#xff1a;explicit關鍵字析構函數析構函數的概念析構函數的特性含有類類型的成員變量的類析構函數的調用拷貝構造函數拷貝構造函數的概念拷貝構造函數的特性淺拷貝和深拷貝&#xff1a;拷貝構造函數典型調用場景&…

Linux網絡編程:TCP的遠程多線程命令執行

目錄 前言&#xff1a; 一、前文補充 二、服務端的修改 三、Command類的新增 前言&#xff1a; 好久不見&#xff0c;最近忙于其他事情&#xff0c;就耽誤了咱們的Linux的網絡部分的學習。 今天咱們先來給之前所學的TCP的部分進行一個首尾工作&#xff0c;主要是給大家介紹…

重學React(三):狀態管理

背景&#xff1a; 繼續跟著官網的流程往后學&#xff0c;之前已經整理了描述UI以及添加交互兩個模塊&#xff0c;總體來說還是收獲不小的&#xff0c;至少我一個表面上用了四五年React的前端小卡拉米對React的使用都有了新的認知。接下來就到了狀態管理&#xff08;React特地加…

java web項目入門了解

目錄一、項目流程1. 使用servle2. 使用框架二、了解java web項目構造1. 項目目錄結構2. 查看頁面訪問順序3. 發起請求&#xff1a;jqueryajax4. 接受參數5. JSONJSON 數組三、get和post請求區別一、項目流程 1. 使用servle 有客戶端和服務端&#xff0c;客戶端和服務端進行交…

網絡資源模板--基于Android Studio 實現的日記本App

目錄 一、測試環境說明 二、項目簡介 三、項目演示 四、部設計詳情&#xff08;部分) 創建修改頁面 五、項目源碼 一、測試環境說明 電腦環境 Windows 11 編寫語言 JAVA 開發軟件 Android Studio (2020) 開發軟件只要大于等于測試版本即可(近幾年官網直接下載也可…

GO的啟動流程(GMP模型/內存)

目錄第一部分&#xff1a;程序編譯第二部分&#xff1a;函數解讀1&#xff09;Golang 核心初始化過程2&#xff09;創建第一個協程3&#xff09;啟動系統調度4&#xff09;跳轉main函數5&#xff09;總結第三部分&#xff1a;GMP模型Goroutine流程解讀第四部分&#xff1a;內存…

OLTP與OLAP:實時處理與深度分析的較量

OLTP&#xff08;Online Transaction Processing&#xff09;定義&#xff1a;OLTP 系統主要用于管理事務性應用程序的數據。這類系統需要支持大量的短時、快速的交互式事務&#xff0c;比如銀行交易、在線購物訂單等。特點&#xff1a;實時處理&#xff1a;OLTP 系統要求對數據…

數據安全與隱私保護:企業級防護策略與技術實現

引言&#xff1a;數據安全的新時代挑戰在數字化轉型加速的今天&#xff0c;數據已成為企業最核心的資產。然而&#xff0c;數據泄露事件頻發&#xff0c;據 IBM《2024 年數據泄露成本報告》顯示&#xff0c;全球數據泄露平均成本已達445 萬美元&#xff0c;較 2020 年增長了 15…

AI_RAG

一.為什么需要RAG&#xff08;AI幻覺&#xff09;大模型LLM在某些情況下給出的回答很可能錯誤的&#xff0c;涉及虛構甚至是故意欺騙的信息。二.什么是RAGRAG是一種結合“信息檢索”和“文本生成”的技術&#xff0c;旨在提升生成式AI模型的準確性和可靠性。它通過以下兩個核心…

LeetCode111~130題解

LeetCode111.二叉樹的最小深度&#xff1a; 題目描述&#xff1a; 給定一個二叉樹&#xff0c;找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明&#xff1a;葉子節點是指沒有子節點的節點。 示例 1&#xff1a; 輸入&#xff1a;root …

n8n飛書webhook配置(飛書機器人、飛書bot、feishu bot)Crypto節點、js timestamp代碼、Crypto node

自定義機器人使用指南 利用 n8n 打造飛書 RSS 推送機器人 文章目錄自定義機器人使用指南注意事項功能介紹在群組中添加自定義機器人操作步驟邀請自定義機器人進群。- 進入目標群組&#xff0c;在群組右上角點擊更多按鈕&#xff0c;并點擊 設置。- 在右側 設置 界面&#xff0…

nhdeep檔案管理工具軟件官網

歡迎訪問nhdeep官網&#xff1a; www.nhdeep.com NHDEEP提供一系列專業的單機版檔案管理工具&#xff0c;滿足不同場景下的檔案管理需求&#xff0c;無需網絡連接&#xff0c;數據安全可靠。所有工具均提供免費試用版下載。 檔案綜合管理系統單機版:全面的檔案管理解決方案&a…

RocketMQ節點部署計算方案

節點計算公式 業務場景 預期峰值TPS&#xff1a;200,000 單組容量&#xff1a;40K TPS 容災要求&#xff1a;同城雙機房 nameServer節點數max(3, (15/50) 1) max(3, 0.3 1) max(3, 1.3) 3 Broker節點數ceil(200,000 / 40,000) 5組 總節點數 NameServer節點Broker組數(Mas…

MyBatis聯合查詢 - XML篇

文章目錄數據庫設計MyBatis 配置MyBatis 映射文件Mapper 接口總結數據庫設計 建表 SQL CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50) NOT NULL );CREATE TABLE order (id INT PRIMARY KEY AUTO_INCREMENT,user_id INT NOT NULL,order_no VARCHAR(…

Kubelet 探針如何選擇 IP:status.PodIP 溯源與“同 Pod 兩個 IP“現象解析

背景與現象同一個 Pod 的 readiness 和 liveness 探針日志顯示連接的 IP 不一致&#xff08;例如 10.10.6.10:9999 與 10.10.6.32:9999&#xff09;。本文從 kubelet 源碼入手&#xff0c;解釋探針目標 IP 的來源、為何會出現兩個不同 IP&#xff0c;并給出建議與驗證方法。在如…

Arm Development Studio 安全通告:CVE-2025-7427

安全之安全(security)博客目錄導讀 目錄 一、概述 二、CVE 詳情 三、受影響產品 四、建議 五、致謝 六、版本歷史 一、概述 ARM已知悉一個影響 Arm Development Studio 的安全漏洞&#xff0c;該漏洞可能允許攻擊者執行 DLL 劫持攻擊&#xff08;DLL hijacking attack&…

C#異步編程雙利器:異步Lambda與BackgroundWorker實戰解析

**摘要&#xff1a;**深入剖析兩種異步編程范式&#xff0c;解決GUI線程阻塞難題 一、異步Lambda表達式&#xff1a;事件處理的輕量化利器 核心價值&#xff1a;簡化事件響應中的異步操作&#xff0c;避免UI線程阻塞 ? 典型應用場景&#xff08;WPF示例&#xff09;&#xff1…