日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Codeforces 1329 题解

發布時間:2025/3/15 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Codeforces 1329 题解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

A

先構造最左方案,然后能調整盡量調整即可。
時間復雜度 \(O(m)\).
代碼: 75367082

B

顯然每個二進制位是獨立的,且只能有 \(0\) 個或 \(1\) 個數在該位上有值。乘起來即可。
時間復雜度 \(O(\log n)\).
代碼: 75373134

C

貪心。每次刪去能刪的盡量大的(不虧)。
比較好的實現方法是定義一個 solve(u) 函數,先不停地刪 \(u\) 點直到刪不下去為止,然后再遞歸 solve(u<<1),solve(u<<1|1). 沒有必要比較大小,因為每個子樹內刪的個數是固定的。
時間復雜度 \(O(2^hh)\).
代碼: 78094188

D

對于每一對相鄰相等的元素,我們在中間畫一條線,并定義線的值等于相等元素的值。于是就得到了一個新的序列,操作等價于:在新的序列上選擇相鄰兩個元素,如果不等則一起刪去,相等則留下一個。也就相當于盡量多刪不等的。
不難發現最優策略:當不存在一個元素出現次數嚴格超過一半時一定可以一直刪不同直到只剩下一個元素,否則可以讓每個其他元素都和這個元素配對。策略就是如果還剩下兩種或更多則取出現次數最多的和它任意一個相鄰的刪,否則就刪相同的。
難點是如何實現:要對每個字符維護一個集合,集合中的每個元素是一個二元組,表示一對相鄰不同的位置,且其中一個是該字符。使用 set 即可。
最后還要求輸出方案,要找到在當前序列中的位置,樹狀數組+并查集維護哪些點還沒被選即可。
時間復雜度 \(O(n|\Sigma|+n\log n)\).
代碼: 78207027

E

首先稍微轉化一下:有 \(m\) 個數 \(a_i\),找出一個序列 \(b_i\) 滿足 \(\sum^m_{i=1}b_i=K\) (\(m,K\) 實際為輸入的 \(m+1,K+m+1\)),對每個 \(i\) 找出 \(b_i\) 個正整數和為 \(a_i\),最小化所有找出的數的極差。
不難發現對于一個 \(i\) 最優策略一定是分配得盡量平均,即 \(b_i-a_i\mod b_i\)\(\lfloor\frac{a_i}{b_i}\rfloor\)\(a_i\mod b_i\)\(\lceil\frac{a_i}{b_i}\rceil\). 于是就是要最小化 \(\max^m_{i=1}\lceil\frac{a_i}{b_i}\rceil-\min^m_{i=1}\lfloor\frac{a_i}{b_i}\rfloor\).
考慮求出兩個值:\(R\) 表示 \(\max\) 部分的最小可能值是多少,\(L\) 表示 \(\min\) 部分的最大可能值是多少。這個容易直接二分得到。
可以發現如果對于每個 \(i\) 都存在 \(b_i\) 滿足 \(L\le\lfloor\frac{a_i}{b_i}\rfloor\le\lceil\frac{a_i}{b_i}\rceil\le R\) 則一定可以在 \(L\)\(R\) 的方案基礎上進行調整得到總個數恰好為 \(K\) 的方案。即這種情況下答案為 \(R-L\).
但是有可能存在一些 \(i\) 不存在合法的 \(b_i\). 這時候我們求出最接近 \([L,R]\)\(b_i\),即滿足 \(\lfloor\frac{a_i}{x}\rfloor\lt L\) 的最小的 \(x\) 和滿足 \(\lceil\frac{a_i}{y}\rceil\gt R\) 的最小的 \(y\). 我們令 \(a_i\) 的貢獻(就是參與到 \(\max\)\(\min\) 的計算中的值)為 \(x\)\(y\) 中的一者(顯然它不可能同時成為 \(\max\)\(\min\),因為它不可能既 \(\gt R\)\(\lt L\)),那么和上面同理可證一定能調整得到一個合法方案。
于是我們的問題就轉化為,有一個集合,初始時只有 \(L,R\) 兩個數,現在有 \(n\) 個二元組,要從每個中挑出一個加入集合,最小化集合內的極差。直接先默認全選小的,然后從小到大每次把最小的改成選大的即可。
時間復雜度 \(O(m\log m+m\log n)\).
代碼: 78272837

總結

以上是生活随笔為你收集整理的Codeforces 1329 题解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。