[CSP-J 2021] 小熊的果籃

題目

1
在這里插入圖片描述
2
在這里插入圖片描述

代碼

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct node{int pre,//上一個水果塊(對于水果就是上個水果)l,//塊開始的序號,左邊界 d,//塊類型,0/1id,//水果序號 r,//塊結束的序號,右邊界 next;//下一塊(下個水果)node(){d=-1;id=-1;};//空參數構造函數 node(int px,int lx,int vx,int rx,int nx){//構造水果塊。//上一塊,左邊界,水果類型,右邊界,下一塊 pre=px,l=lx,d=vx,r=rx,next=nx;};node(int px,int idx,int nx){//構造一個水果//上一個水果,水果序號,下一個水果 pre=px,id=idx,next=nx;}; bool isempty(){//判定塊是否空了(已挑空該塊水果) if(l>r)return 1;else return 0;} 
}k[N],f[N];//N塊,N水果 
int n,//水果數m=0;//塊序號 
void view(int x){cout<<"果籃"<<x<<endl;for(int i=k[0].next;k[i].d!=-1;i=k[i].next){//遍歷所有塊 cout<<i<<"("<<k[i].d<<")";for(int j=k[i].l;j!=k[k[i].next].l;j=f[j].next)//遍歷該塊所有水果 cout<<f[j].id<<" ";cout<<"\t";}cout<<endl;
}
int main(){//freopen("data.cpp","r",stdin);int l=0,//左邊界 r,//右邊界 x=-1,//本塊水果類型 x2;//后塊水果類型 scanf("%d",&n);for(int i=1;i<=n+1;i++){//遍歷所有水果。多循環一次,用以確認最后一塊 if(i<=n)scanf("%d",&x2);else x2=-2;//最后一塊,跟第一塊-1不一樣(全空后不合并)f[i]=node{i-1,i,i+1};//建立本水果(鏈表) if(x!=x2){//本水果跟上一水果不一樣,那前面就是一個塊 r=i-1;//上一塊的右邊界 k[m]=node{m-1,l,x,r,m+1};//建立上一塊(鏈表) l=i,x=x2;//本塊的左邊界和水果類型 m+=1;//本塊序號 }}k[m]=node{m-1,n+1,-2,n+1,m+1};//尾塊//view(0);while(k[0].next!=m){//第一個空塊的下一個不是最后一個空塊就繼續 for(int i=k[0].next;i!=m+1;i=k[i].next){//遍歷所有塊,包括最后一個空塊 if(k[i].d!=-2){//非最后一個空塊 //cout<<"輸出"<<i<<"("<<k[i].v[0]<<")\n";cout<<f[k[i].l].id<<" ";//輸出該塊左邊界對應水果序號 if(!k[i].isempty()){//非空就去掉第一個元素——左邊界右移 f[f[k[i].l].pre].next=f[k[i].l].next;//左邊界的上一水果的下一水果是左邊界的下一水果 f[f[k[i].l].next].pre=f[k[i].l].pre;//左邊界的下一水果的上一水果是左邊界的上水果 k[i].l=f[k[i].l].next;//塊的首水果變成水果的下一水果 }}int j=k[i].pre;//處理上一塊 if(k[j].isempty()){//如果上一塊空了,if(k[k[j].pre].d==k[k[j].next].d){//前后一樣,合并。//合并后塊到前塊 k[k[j].pre].r=k[k[j].next].r;//上一塊的右邊界改成下一塊的右邊界水果 k[k[j].pre].next=k[k[j].next].next;//前塊的后塊是后塊的后塊 k[k[k[j].next].next].pre=k[j].pre;//后塊的后塊的前塊是前塊 }else{//前后不一樣,續接上 k[k[j].pre].next=k[j].next;//前一個的下一個是自己下一個 k[k[j].next].pre=k[j].pre;//下一個的前一個是自己上一個 }}//view(i);}cout<<endl;//view();} return 0;
}

思路

  • 模擬按塊取水果,并動態合并空塊
  • 雙層雙向鏈表。水果塊和各水果
  • 遍歷所有塊,并輸出每塊首水果。某塊被取空,如果前后塊一樣就合并,否則續接
  • 每個水果會被處理1次(O(n)),每個果籃會被處理1次(O(n)),能處理n=2e5的規模。

小結

鏈表還是很有趣,多操作,熟能生巧。
都在處理序號,不管塊雙向鏈表和水果雙向鏈表。塊的首個水果和尾水果跟水果的序號統一。

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

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

相關文章

【C++】STL二叉搜索樹——map與set容器的基礎結構

目錄 前言 1.二叉搜索樹的概念 1.1基本結構 1.2性能分析 2.二叉搜索樹的實現 2.1創建 2.2插入 2.3查找與遍歷 2.4刪除 3.二叉搜索樹類代碼 前言 C中STL的map與set容器廣泛應用于實踐過程中&#xff0c;本文將詳細分析容器最基礎的二叉搜索樹結構&#xff0c;為后續map…

基于Spring Boot和SSE的實時消息推送系統

一、SSE技術深度解析 1.1 協議工作原理 #mermaid-svg-u7ZBlEsXcn68R5a8 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-icon{fill:#552222;}#mermaid-svg-u7ZBlEsXcn68R5a8 .error-text{fi…

Day 40 訓練和測試的規范寫法

知識點回顧&#xff1a; 彩色和灰度圖片測試和訓練的規范寫法&#xff1a;封裝在函數中展平操作&#xff1a;除第一個維度batchsize外全部展平dropout操作&#xff1a;訓練階段隨機丟棄神經元&#xff0c;測試階段eval模式關閉dropout 作業&#xff1a;仔細學習下測試和訓練代…

分析代碼并回答問題

代碼 <template><div>Counter: {{ counter }}</div><div>Double Counter: {{ doubleCounter }}</div> </template><script setup lang"ts"> import { ref, computed } from "vue";const counter ref(0);const …

在macOS上掃描192.168.1.0/24子網的所有IP地址

在macOS上掃描192.168.1.0/24子網的所有IP地址&#xff0c;可以通過終端命令實現。以下是幾種常用方法&#xff1a; 使用ping命令循環掃描 打開終端執行以下腳本&#xff0c;會逐個ping測試192.168.1.1到192.168.1.254的地址&#xff0c;并過濾出有響應的IP&#xff1a; for i …

Java基礎05——類型轉換(本文為個人學習筆記,內容整理自嗶哩嗶哩UP主【遇見狂神說】的公開課程。 > 所有知識點歸屬原作者,僅作非商業用途分享)

Java基礎05——類型轉換 類型轉換 由于Java是強類型語言&#xff0c;所以要進行有些運算的時候&#xff0c;需要用到類型轉換。 如&#xff1a;byte(占1個字節)&#xff0c;short(占2個字節)&#xff0c;char(占2個字節)→int(4個字節)→long(占8個字節)→float(占4個字節)→do…

mysql基礎(二)五分鐘掌握全量與增量備份

全量備份 Linux環境 數據備份 數據庫的備份與恢復有多中方法&#xff0c;通過mysql自帶的mysqldump工具可對數據庫進行備份。語法&#xff1a; mysqldump -u username -p password --databases db_name > file_name .sql說明&#xff1a; -u參數指定用戶名&#xff0c;usern…

使用Windbg分析多線程死鎖項目實戰問題分享

目錄 1、問題描述 2、使用.effmach x86命令切換到32位上下文 3、切換到UI線程&#xff0c;發現UI線程死鎖了 4、使用!locks命令查看臨界區鎖的詳細信息&#xff0c;遇到了問題 5、使用dt命令查看臨界區對象信息&#xff0c;找到發生死鎖的多個線程 6、用戶態鎖與內核態鎖…

防火墻組網方式總結

一、部署模式&#xff1a;靈活適配多樣網絡環境下一代防火墻&#xff08;NGAF&#xff09;具備極強的網絡適應能力&#xff0c;支持五種核心部署模式&#xff0c;可根據不同網絡需求靈活選擇。路由模式&#xff1a;防火墻相當于路由器&#xff0c;位于內外網之間負責路由尋址&a…

AI大模型:(二)5.1 文生視頻(Text-to-Video)模型發展史

目錄 1.介紹 2.發展歷史 2.1.早期探索階段(2015-2019) 2.1.1.技術萌芽期 2.1.2.RNN/LSTM時代 2.2.技術突破期(2020-2021) 2.2.1 Transformer引入視頻生成 2.2.2 擴散模型的興起 2.3.商業化突破期(2022-2023) 2.3.1 產品化里程碑 2.3.2 競爭格局形成 2.4.革命…

14mm尋北儀能否塞進液壓支架生死縫隙?

在煤礦井下世界的方寸之間&#xff0c;液壓支架的每個關鍵節點都承載著千鈞重壓。頂梁鉸接點、立柱頂端、掩護梁角落&#xff0c;恰恰是空間最為局促的“禁區”。ER-MNS-10A MEMS尋北儀應運而生&#xff01;它采用了先進的MEMS陀螺技術&#xff0c;以14mm至薄高度、40g極致輕盈…

python之淺拷貝深拷貝

文章目錄潛拷貝(shallow copy)深拷貝(deep copy)總結一下python的淺拷貝和深拷貝.潛拷貝(shallow copy) python中潛拷貝指的是:構造一個新的復合對象&#xff0c;然后將原對象中的對象引用插入其中 平常開發過程中潛拷貝是比深拷貝更常見的場景. 比如編程中使用到的一些基本的…

普通大學本科生如何入門強化學習?

問題:你平時是如何緊跟大型語言模型和智能體技術前沿的&#xff1f;有哪些具體的學習和跟蹤方式&#xff1f;回答:我會通過“輸入-內化-實踐”結合的方式跟蹤前沿。首先&#xff0c;學術動態方面&#xff0c;每天花10分鐘瀏覽arXiv的http://cs.CL和http://cs.AI板塊&#xff0c…

新手向:Python實現數據可視化圖表生成

Python數據可視化入門&#xff1a;從零開始生成圖表數據可視化是數據分析過程中不可或缺的關鍵環節&#xff0c;它通過將抽象的數字信息轉化為直觀的圖形展示&#xff0c;幫助分析師和決策者更快速、更準確地發現數據中隱藏的模式、規律和發展趨勢。在當今大數據時代&#xff0…

VBA即用型代碼手冊:計算選擇的單詞數Count Words in Selection

我給VBA下的定義&#xff1a;VBA是個人小型自動化處理的有效工具。可以大大提高自己的勞動效率&#xff0c;而且可以提高數據的準確性。我這里專注VBA,將我多年的經驗匯集在VBA系列九套教程中。作為我的學員要利用我的積木編程思想&#xff0c;積木編程最重要的是積木如何搭建及…

DNS(域名系統)

分層結構根域名&#xff08;ipv4&#xff0c;13臺&#xff09;&#xff0c;二級域名&#xff0c;三級域名……相關記錄A將域名解析為ipv4地址AAAA將域名解析為ipv6地址MX指名該區域為郵件服務區PTR反向查詢將主機名解析為域名NS記錄服務器的名字CNAME別名查詢方式遞歸查詢迭代查…

【大模型】強化學習算法總結

角色和術語定義 State&#xff1a;狀態Action&#xff1a;動作Policy/actor model&#xff1a;策略模型&#xff0c;用于決策行動的主要模型Critic/value model&#xff1a;價值模型&#xff0c;用于評判某個行動的價值大小Reward model&#xff1a;獎勵模型&#xff0c;用于給…

基于梅特卡夫定律的開源鏈動2+1模式AI智能名片S2B2C商城小程序價值重構研究

摘要&#xff1a;梅特卡夫定律揭示了網絡價值與用戶數量的平方關系&#xff0c;在互聯網經濟中&#xff0c;連接的深度與形式正因人的參與發生質變。本文以開源鏈動21模式、AI智能名片與S2B2C商城小程序的協同應用為研究對象&#xff0c;通過實證分析其在社群團購、下沉市場等場…

Ubuntu22.04安裝CH340驅動及串口

一、CH340驅動安裝 1.1 查看USB設備能否被識別 CtrlAltT打開終端&#xff1a; lsusb 插入設備前&#xff1a; 插入設備后&#xff1a; 輸出中包含ID 1a86:7523 QinHeng Electronics CH340 serial converter的信息&#xff0c;這表明CH340設備已經被系統識別。 1.2 查看USB轉串…

CPU緩存(CPU Cache)和TLB(Translation Lookaside Buffer)緩存現代計算機體系結構中用于提高性能的關鍵技術

CPU緩存&#xff08;CPU Cache&#xff09;和TLB&#xff08;Translation Lookaside Buffer&#xff09;緩存是現代計算機體系結構中用于提高性能的關鍵技術。它們通過減少CPU訪問數據和指令的延遲來提高系統的整體效率。以下是對這兩者的詳細解釋&#xff1a; 1. CPU 緩存 CPU…