暑假刷題記 B

来源:https://www.cnblogs.com/ademik/archive/2023/07/31/17593779.html
-Advertisement-
Play Games

## 動態規劃 ## 字元串 ## 雜題 #### [A:Animals and Puzzle](https://www.luogu.com.cn/problem/CF713D) #### [B:Vanya and Treasure](https://www.luogu.com.cn/problem ...


動態規劃

字元串

雜題

A:Animals and Puzzle

B:Vanya and Treasure

根號分治。

實際上是從 \((1, 1)\) 先找一個 \(1\),再找一個 \(2\dots\) 最後找一個 \(p\) 然後
依次按最短路走過去。

我們有兩種想法, 直接 BFS 遞推得到當前點到所有點的距離 或者 直接暴力枚舉兩個層之間的所有點對, 兩種做法的時間複雜度 都是 \(O(n^2 m^2)\)

考慮縫合, 經過一番神秘的複雜度分析, 我們得到了 \(O(nm \sqrt{nm})\) 的優秀演算法。

D:Awesome Substrings

根號分治。

\(s_i\) 表示 \(\sum\limits_{1}^{i}a_i\), 且 枚舉的倍數為 \(d\), 則有 \(r - l = d \times (s_r - s_l)\)

直接暴力做是 \(O(n^2)\), 且不好優化。 我們考慮分塊計算的思想, 設閾值為 \(T\)

\(d \in [1, T]\) 時, 將原式變形可得 \(d \times s_r - r = d \times s_l - l\), 我們設 \(f(i, d) = d \times s_i - i\), 對於每個 d 可以求出 $ f(0...n, d)$ 的值。 對於每個值 \(x\),若有 \(k\)\(i\) 滿足 \(f(i, d) = x\), 它都會對答案產生 \(\tbinom{k}{2}\) 的貢獻。 這一部分可以做到 \(O(nT)\) 的實現。

\(d \in (T, n]\) 時, 將原式變形可以得到 \(s_r - s_l = \dfrac{r - l}{d} < \dfrac{n}{d}\) , 即有貢獻的 \((a, b)\) 對應的區間中 \(1\) 的個數 \(k < \dfrac{n}{d}\)。 因此我們對於每個 \(l, k\) 找到 \(r\) 的範圍, 其對答案的貢獻為 \(\lfloor \dfrac{r - i}{k} \rfloor - \lfloor \dfrac{l - i}{k} \rfloor\) , 再減去 \(d \le T\) 的部分。 這一部分可以做到 \(O(n\frac{n}{T})\)

總時間複雜度為 \(O(nT + n\frac{n}{T})\), 當 \(T = \sqrt{n}\) 時最優。

E:PolandBall and Gifts

若將送別人禮物看做一條有向邊, 那麼排列 p 所形成的是 一些閉合的有向環。 一個人收到禮物當且僅當一條有向邊所連接的兩個人都帶了禮物。

先考慮最大化。 假定環的大小為 k, 對於一個奇環, 當有 \(\dfrac{k + 1}{2}\) 個人不帶禮物時, 這 k 個人收不到禮物; 對於一個偶環, 當有 \(\dfrac{k}{2}\) 個人不帶禮物時, 這 k 個人收不到禮物。

一個不帶禮物的人最多可以影響兩個人, 我們考慮儘量使每個不帶禮物的人的影響最大。 而對於任意環, 只需要 \(\lfloor \frac{k}{2} \rfloor\) 個不帶禮物的人即可將 可以影響兩個人的點位 占滿。 我們令 \(ans2 = \sum\limits{\lfloor \dfrac{siz[i]}{2} \rfloor}\)\(siz[i]\) 表示環的大小。 當 \(ans2 >= m\) 時, 每個不帶禮物的人都能占據一個 影響兩個人的點位;
否則的話, 剩餘的人就占據奇環上只能影響一個人的點位。

再考慮最小化。 對於一個大小為 \(k\) 的環, 當環上有 \(k\) 個不帶禮物的人 與 有 \(k - 1\) 個不帶禮物的人都只會造成 \(k\) 個人得不到禮物。 故而, 將一個環完全占滿更優。 原題即轉化為 判斷是否能找到幾個環 使 他們的大小和 為 \(m\), 如果能, 答案即為 \(m\), 否則的話, 否則,忘帶禮物的人的形式就是若幹個環加上一條鏈,而這條鏈的尾部會有一個雖然帶了禮物,但是收不到禮物的人。所以答案就是 \(m + 1\)

F:Nastya and Time Machine

構造。

不難發現, 經過節點次數的下界是所有節點的度數的最大值(類比於菊花)。 如何構造出滿足下界的答案?

為了方便構造,若進入節點 \(x\) 的時間點為 \(t_x\),則離開節點 \(x\) 的時間點必須為 \(t_x - 1\) (這樣返回節點 x 的父節點時間點就為 \(t_x\))

在遍歷節點 x 的所有子節點時可能會有如下兩種情況:

  • \(t_x + deg_x < maxdeg\) 則過程中不會超過答案,只需遍歷結束後將時間回到 \(t_x - 1\) 即可。

  • \(t_x + deg_x \ge maxdeg\) 過程中會有某一個節點的時間點超過答案。因為總共會占用 \(deg_x + 1\) 個時間點,因此當過程中的標號達到 maxdeg 時只需回到 \(maxdeg − deg_x\) 的時間點即可。

G:Andryusha and Nervous Barriers

直接正向模擬很困難, 考慮從另一個角度解題。

我們可以將板子看成從高到低依次插入得到的, 這樣的話, 我們可以不用在意板子 和 球的高度, 只需關註他們的橫坐標即可。

那麼此時, 一個板子的作用實際上是 求出 一定區間中球的個數 \(x\), 並使區間兩端點 \(+x\), 將區間(除去端點)賦值為 \(0\)

考慮到球在一定高度下落可能會砸碎板子這一因素, 我們對於不同組的球再記錄一個參數 表示他們下降的高度, 用 優先隊列 來對高度進行排序。

我們考慮設計一個函數, 詢問一定區間內所有 不足以砸碎當前板子的球的個數。 由於對每個橫坐標不同的點都需要查找一次優先隊列, 時間複雜度過高。
考慮維護一個變數記錄區間最小值, 當區間最小值大於 堅固程度時直接返回, 這樣和區間取模類似, 在數據隨機條件下時間複雜度有保證。

H:Omkar and Landslide

結論題。

  • 對山的調整順序並不影響最終的結果, 且停止時有 \(h_{i + 1} - h_i \in \{0, 1\}\)

  • 可以證明, 停止時 \(h_{i + 1} - h_i\) 最多有一個為 \(0\), 其他的為 \(1\)

這樣的話, 對於一個 n 和 h, 就可以直接確定最終的答案。

J:Goodbye Souvenir

首先, 由於區間中一種數只會計算一次貢獻, 那麼我們要求的 \(last_x - first_x = \sum\limits_{i \in [L, R]}^{a[i] = x} i - pre_i\), 這是因為對於中間的部分而言, 令 \(j\) 為下一個位置滿足 \(a[j] = x\) 的下標, 則 \(pre_j = i\), 那麼 \(i - pre_i + j - pre_j = j - pre_i\)

那麼此時, 我們可以具化出兩個不等式, \(i \le R\)\(pre_i \ge L\), 在加入一個時間軸, 即三維偏序。

具體的, 我們有 \(set\) 來維護每個值的首碼, 修改一個數時需要修改以當前數為首碼 數據。

K:Sources and Sinks

Q:Omkar and Time Travel


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 環境:CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 sipp版本:3.6.1 python版本:3.9.12 日常工作中,有時會遇到批量自動壓測FreeSWITCH的需求,sipp是一個非常好的VoIP壓測工具,python是個很好用的腳本語言,今天記錄下CentOS 7環 ...
  • ## Spring安全框架 Spring Security是一個用於保護基於Java的應用程式的框架。它是一個功能強大且高度可定製的身份驗證和訪問控制框架,可以輕鬆地集成到各種應用程式中,包括Web應用程式和RESTful Web服務。Spring Security提供了全面的安全解決方案,用於身份 ...
  • 前言:今天在解決一個問題時,程式總是不能輸出正確值,分析邏輯思路沒問題後,發現原來是由於函數傳遞導致了這個情況。 LeetCode 113 問題:給你二叉樹的根節點root和一個整數目標和targetSum,找出所有 從根節點到葉子節點 路徑總和等於給定目標和的路徑。 示例 輸入:root = [5 ...
  • ## python規範 - 函數必須寫註釋:文檔註釋格式`'''註釋內容'''` - 參數中的等號兩邊不要用空格 - 相鄰函數用兩個空行隔開 - 小寫 \+ 下劃線 1. 函數名 2. 模塊名 3. 實例名 - 駝峰法 1. 類名 ## tips ```python # 一行代碼太長,使用\折行 i ...
  • # 資料庫連接池 ## **傳統獲取Connection問題分析** 1. 傳統的JDBC資料庫使用 DriverManager 來獲取, **每次向資料庫建立連接的時候都要將 Connection 載入到記憶體中,再驗證IP地址,用戶名和密碼(0.05 ~ 1 s 時間)**。需要資料庫連接的時候, ...
  • ### 一.定義 面向對象是:將事務高度抽象化的編程模式 將問題分解成一個個小步驟,對每個步驟進行抽象,形成對象,通過不同的對象之間調用,組合解決問題。 在進行面向對象進行編程時,要把屬性、行為等封裝成對象,然後基於這些對象及對象的能力進行業務邏輯的實現。創建一次,重覆使用 ### 二.面向對象三個 ...
  • ##### RabbitMQ安裝 ``` docker run -d --name xd_rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbi ...
  • 本文介紹從gitee下載nacos源碼,在本地編譯,並導入idea進行本地調試。 # 從gitee下載源碼 由於github訪問速度慢,所以我選擇使用gitee的鏡像倉庫: ```shell git clone https://gitee.com/mirrors/Nacos.git ``` 本文使用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...