題解 洛谷P13778 「o.OI R2」=+#-

文章目錄

    • 題解
    • 代碼

居然沒有題解?我來寫一下我的抽象做法。


題解

手玩一下,隨便畫個他信心的折線圖,如下:

可以發現,如果我們知道終止節點,那么我們就可以知道中間有多少個上升長度。(因為它只能 +1+1+1 或者 ?1-1?1

然后可以發現一個性質,如果我們把連續的有出現的值在值域上看成一個聯通塊,如圖:

其中的線段表示這一段的值有出現過。顯然,kkk 只能往左跳,不能跨過段往右跳。

那么可以考慮枚舉從右往左枚舉 kkk 能否停在這個段內。

具體的,如圖:

此時我們是在判斷區間 [5,8][5,8][5,8] 是否合法,那么本質就是看 kkk 能否停在區間 [5,8][5,8][5,8] 前面一個區間右端點 +1+1+1 往右的位置。

容易發現,紅色區間內的所有數又是有用的,可以作為 +1+1+1 使用。

那么 kkk 最終停在的位置就是 k+c?(n?c)k+c-(n-c)k+c?(n?c)

其中 ccc 是紅色區間的可用 +1+1+1 數量。

判斷結果是否比左邊界大,即可判定有沒有解。

另外有特殊情況,例如如圖,算出來 kkk 最終的位置比 888 大。

這意味著紅色區間內可用 +1+1+1 比其它 ?1-1?1 多。

那么就需要這些 +1+1+1 兩兩低消。而我們進入一個區間 [l,r][l,r][l,r] 后,所能到達的右端點最大就是 r+1r+1r+1

但是具體是不是 r+1r+1r+1 呢?可以發現最終所停位置一定和 n+kn+kn+k 的奇偶性相同,根據這個,對 rrr 或者 r+1r+1r+1 取一個 min?\minmin 即可。

具體維護可以使用并查集。

當然還有一些小細節需要處理,具體地可以看代碼。

代碼

int n,k;
int c[N],cnt[N],fa[N],l[N],r[N],uur[N];
inline int ga(int x){return x==fa[x]?x:fa[x]=ga(fa[x]);
}
int vis[N];
void uni(int x,int y){int Fx=ga(x),Fy=ga(y);if(Fx==Fy)return ;fa[Fx]=Fy;l[Fy]=min(l[Fx],l[Fy]);r[Fy]=max(r[Fx],r[Fy]);c[Fy]+=c[Fx];
}
struct rrrr{int l,r,id;
}line[N];
void solve(){for(int i=1;i<N;i++)fa[i]=l[i]=r[i]=i,vis[i]=0,cnt[i]=0,c[i]=0,uur[i]=0;cin>>n>>k;for(int i=1;i<=n;i++){int x;cin>>x;cnt[x]++;c[x]++;}for(int i=1;i<=N-2;i++){if(cnt[i]&&cnt[i+1])uni(i,i+1);}int lid=0;for(int i=1;i<=N-2;i++){if(cnt[i]){int fi=ga(i);if(!vis[fi]){++lid;line[lid]={l[fi],r[fi],lid};uur[fi]=lid;vis[fi]=1;}}}for(int i=1;i<=N-2;i++)vis[i]=0;int id=0;int	resc=0;int ans=0;for(int i=k;i>=1;i--){if(cnt[i]){int fi=ga(i);if(vis[fi])continue;resc+=c[fi];//	cout<<fi<<":   \n";//	cout<<resc<<" ";int Lid=k+resc-(n-resc);//	cout<<Lid<<" ";if(Lid>line[uur[fi]-1].r){ans=min(Lid,((n+k)%2==(line[uur[fi]].r%2))?line[uur[fi]].r:line[uur[fi]].r+1);//	cout<<ans<<" ";cout<<(n-(k-ans))/2<<"\n";return ;}vis[fi]=1;}}cout<<resc<<"\n";
}

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

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

相關文章

RTSP流端口占用詳解:TCP模式與UDP模式的對比

在音視頻傳輸協議中&#xff0c;RTSP&#xff08;Real-Time Streaming Protocol&#xff0c;實時流傳輸協議&#xff09;被廣泛用于點播、直播、監控等場景。開發者在實際部署或調試時&#xff0c;常常會遇到一個問題&#xff1a;一路 RTSP 流到底占用多少個端口&#xff1f; 這…

websocket的key和accept分別是多少個字節

WebSocket的Sec-WebSocket-Key是24字節&#xff08;192位&#xff09;的Base64編碼字符串&#xff0c;解碼后為16字節&#xff08;128位&#xff09;的原始隨機數據&#xff1b;Sec-WebSocket-Accept是28字節&#xff08;224位&#xff09;的Base64編碼字符串&#xff0c;解碼后…

單片機開發----一個簡單的Boot

文章目錄一、設計思路**整體框架設計****各文件/模塊功能解析**1. main.c&#xff08;主程序入口&#xff0c;核心控制&#xff09;2. 隱含的核心模塊&#xff08;框架中未展示但必備&#xff09;**設計亮點**二、代碼bootloader.hbootloader.cflash.cmain.c一、設計思路 整體…

Day2p2 夏暮客的Python之路

day2p2 The Hard Way to learn Python 文章目錄day2p2 The Hard Way to learn Python前言一、提問和提示1.1 關于raw_input()1.2 關于input()二、參數、解包、變量2.1 解讀參數2.2 解讀解包2.3 解讀變量2.4 實例2.5 模塊和功能2.6 練習前言 author&#xff1a;SummerEnd date…

【C++設計模式】第二篇:策略模式(Strategy)--從基本介紹,內部原理、應用場景、使用方法,常見問題和解決方案進行深度解析

C設計模式系列文章目錄 【第一篇】C單例模式–懶漢與餓漢以及線程安全 【C設計模式】第二篇&#xff1a;策略模式&#xff08;Strategy&#xff09;--從基本介紹&#xff0c;內部原理、應用場景、使用方法&#xff0c;常見問題和解決方案進行深度解析一、策略模式的基本介紹1.…

四十歲編程:熱愛、沉淀與行業的真相-優雅草卓伊凡

四十歲編程&#xff1a;熱愛、沉淀與行業的真相-優雅草卓伊凡今日卓伊凡收到一個問題&#xff1a;「如何看待40歲還在擼代碼的程序員&#xff1f;」這讓我不禁思考&#xff1a;從何時起&#xff0c;年齡成了程序員職業中的敏感詞&#xff1f;在互聯網的某些角落&#xff0c;彌漫…

pycharm解釋器使用anaconda建立的虛擬環境里面的python,無需系統里面安裝python。

Anaconda建立的虛擬環境可以在虛擬環境里設置任何的python版本&#xff0c;pycharm解釋器使用anaconda建立的虛擬環境里面的python&#xff0c;比如anaconda建立的虛擬環境1、虛擬環境2&#xff0c;pycharm解釋器使用anaconda建立虛擬環境1也可以使用虛擬環境2&#xff0c;根本…

機器學習:后篇

目錄 一、KNN算法-分類 樣本距離 KNN算法原理 缺點 API 二、模型選擇與調優 交叉驗證 保留交叉驗證(HoldOut) k-折交叉驗證(K-fold) 分層k-折交叉驗證(Stratified k-fold) 其他交叉驗證 三、樸素貝葉斯-分類 理論介紹 拉普拉斯平滑系數 API 四、決策樹-分類 理論…

C++17無鎖編程實戰

在多線程編程里&#xff0c;“鎖” 這東西就像把雙刃劍 —— 用好了能保數據安全&#xff0c;用不好就麻煩了&#xff1a;大粒度的鎖把并發度壓得死死的&#xff0c;稍不注意加錯鎖還可能搞出死鎖&#xff0c;程序直接 “僵住”。 但如果能擺脫鎖&#xff0c;搞出支持安全并發…

SVT-AV1 svt_aom_motion_estimation_kernel 函數分析

void *svt_aom_motion_estimation_kernel(void *input_ptr) // 運動估計內核主函數&#xff0c;接收線程輸入參數{// 從輸入參數中獲取線程上下文指針EbThreadContext * thread_ctx (EbThreadContext *)input_ptr;// 從線程上下文中獲取運動估計上下文指針MotionEstimationCon…

關于NET Core jwt Bearer Token 驗證的大坑,浪費3個小時,給各位兄弟搭個橋。

net core 使用jwt Bearer Token 認證獲取接口訪問權限&#xff0c;前期一陣操作沒任何問題&#xff0c;等認證接口寫的好了&#xff0c;通過PostMan測試的時候&#xff0c;總是報一個 IDX14102: Unable to decode the header eyJhbGciOiJIUzI1NiIsInR5cCI6 &#xff0c;錯誤&a…

系統架構設計師備考第14天——業務處理系統(TPS)

一、TPS的核心概念與定位 1. 定義與演進 定義&#xff1a;TPS&#xff08;Transaction Processing System&#xff09;又稱電子數據處理系統&#xff08;EDPS&#xff09;&#xff0c;是處理企業日常事務的信息系統&#xff0c;如財務、庫存、銷售等局部業務管理。歷史地位&…

目標檢測系列-Yolov5下載及運行

由于項目需要&#xff0c;最近一直在看目標檢測相關的資料&#xff0c;不過紙上得來終覺淺&#xff0c;絕知此事要躬行啊。從今日起&#xff0c;將學習的過程記錄一下&#xff0c;作為以后用來復習的材料吧。 我想最快的學習便是直接動手做項目&#xff0c;因此今天就將yolov5模…

Linux內核進程管理子系統有什么第四十二回 —— 進程主結構詳解(38)

接前一篇文章&#xff1a;Linux內核進程管理子系統有什么第四十一回 —— 進程主結構詳解&#xff08;37&#xff09; 本文內容參考&#xff1a; Linux內核進程管理專題報告_linux rseq-CSDN博客 《趣談Linux操作系統 核心原理篇&#xff1a;第三部分 進程管理》—— 劉超 《…

基于飛算JavaAI的學生成績綜合統計分析系統

第一章&#xff1a;項目概述與背景 1.1 項目背景與意義 在教育信息化飛速發展的今天&#xff0c;學生成績管理已成為學校教學管理的核心環節。傳統的學生成績管理多依賴于手工操作或基礎的信息管理系統&#xff0c;存在數據處理效率低、統計分析功能薄弱、數據可視化缺失等問題…

C++程序員必懂:std::bad_function_call異常的真相與預防秘訣

std::bad_function_call 是 C++ 標準庫在 <functional> 頭文件中定義的一個異常類型。當程序試圖調用一個未持有任何可調用目標(即處于“空狀態”)的 std::function 對象時,此異常會被拋出。本文將深入探討該異常的根本原因、詳細的觸發場景,并提供一套完整的預防與處…

Html重繪和重排

在網頁渲染過程中&#xff0c;重繪&#xff08;repaint&#xff09;和重排&#xff08;reflow&#xff09;是兩個重要的概念。理解它們的區別和優化方法對于提升網頁性能至關重要。重排&#xff08;Reflow&#xff09;重排是指當頁面元素的位置、尺寸等幾何屬性發生變化時&…

Redis 客戶端與服務器:銀行的 “客戶服務系統” 全流程

目錄 一、Redis 客戶端&#xff1a;銀行的 “客戶檔案” 二、客戶端關閉&#xff1a;銀行的 “終止服務規則” 三、命令處理流程&#xff1a;柜員辦理業務的 “標準步驟” 1. 接收申請單&#xff08;讀取命令請求&#xff09; 2. 確認業務類型&#xff08;查找命令&#x…

HTML圖片標簽及路徑詳解

圖片是網頁內容的重要組成部分&#xff0c;能夠使頁面更加生動直觀。在HTML中&#xff0c;使用<img>標簽插入圖片&#xff0c;而正確設置圖片路徑則是確保圖片能夠正常顯示的關鍵。一、圖片標簽&#xff08;<img>&#xff09;1. 圖片標簽的基本語法<img>標簽…

【數據庫通過日志恢復數據解讀】

在數據庫恢復機制中&#xff0c;日志文件是實現事務原子性、持久性和崩潰恢復的核心組件。以下通過具體示例和解讀方法&#xff0c;結合主流數據庫系統的實現細節&#xff0c;詳細說明日志文件的內容與分析邏輯。 一、日志文件的核心作用與結構 日志文件通過**預寫式日志&#…