2018 年“三盟科技杯”中國大學生程序設計競賽(湖南)
2018 年“三盟科技杯”中國大學生程序設計競賽(湖南)
A. Easy h-index
題目描述:給出一個數組\(a_i\),求最大的\(h\),使得至少有\(h\)個數不少於\(h\)。
solution
模擬。
時間復雜度:\(O(nlogn)\)
B. Higher h-index
題目描述:寫論文,當一份論文花費了\(x\)小時時,這份論文會得到\(ax\)個引用,\(a\)是給定的常數,\(x\)必須為正整數,每份論文都可以被之後自己寫的論文引用,現在有\(n\)個小時寫論文,求最大的\(h\),使得至少有\(h\)份論文得到的引用個數不少於\(h\)。
solution
當\(n \leq a\)
當\(n > a\)時,若要使答案為\(h\),則采取貪心策略:每份論文只用一個小時,要保證前\(h\)份論文的引用個數不少於\(h\),則\(h-a+h \leq n\),所以\(h_max=\frac{1}{2}(a+n)>n\),所以最終答案為\(\frac{1}{2}(a+n)\)。
時間復雜度:\(O(1)\)
C. Just h-index
題目描述:給出一個數組\(a_i\),每次詢問一個區間\([L, R]\),求最大的\(h\),使得\([L, R]\)內至少有\(h\)個數不少於\(h\)。
solution
可持久化線段樹。
時間復雜度:\(O(qlogn+nlogn)\)
F. Sorting
題目描述:給定\(n\)個三元組\((a_i, b_i, c_i)\),求一個字典序最小的排列\(p_i\),使得
\[\frac{a_{p_{i-1}}+b_{p_{i-1}}}{a_{p_{i-1}}+b_{p_{i-1}}+c_{p_{i-1}}}\leq\frac{a_{p_i}+b_{p_i}}{a_{p_i}+b_{p_i}+c_{p_i}}\]
solution
按題目要求排序。
時間復雜度:\(O(nlogn)\)
G. String Transformation
題目描述:給定兩個字符串\(S, T\),\(S, T\)由‘a, b, c‘組成,可以對字符串\(S\)
solution
操作中沒有‘c‘,也就是說可以以‘c‘為間隔拆分字符串,通過手工計算,可以知道字符串中的‘ab‘, ‘ba‘可以互相替換,因為‘ab‘->‘abaa‘->‘ababba‘->‘ba‘,反過來‘ba‘就可以變成‘ab‘,所以只要每一段的‘a‘, ‘b‘的數目的奇偶性分別相等,則\(S\)可以變成\(T\)。
時間復雜度:\(O(n)\)
I. Longest Increasing Subsequence
題目描述:給定一個數列\(a_i \leq n\),設\(f(x)\)表示將數列裏的\(0\)替換成\(x\)後,最長嚴格上升子序列的長度,求\(\sum_{i=1}^n if(i)\)。
solution
顯然,\(f(x)\)要麽等於原最長嚴格上升子序列,要麽加一。所以只需要求出哪些數能讓答案加一即可。所以先預處理出原序列的最長嚴格上升子序列,若\(i\)和\(j\)是最長嚴格上升子序列的相鄰兩位,且\(i\)和\(j\)之間有\(0\),則\([a_i+1, a_j-1]\)內的數能使答案加一。這個可以從左到右掃一遍,然後記錄最長嚴格上升子序列的某一位的最小的數是什麽即可(這個數的位置的右邊必須有\(0\))
時間復雜度:\(O(nlogn)\)
J. Vertex Cover
題目描述:給出一個\(n\)個點的完全圖,編號為\(0\)~\((n-1)\),點權為\(2^i\)。開始時\(A\)選定若幹條邊,然後\(B\)選擇若幹個點來覆蓋這些邊(每條邊的端點至少有一個被選),\(B\)選的點的點權是最小的。求出\(A\)有多少種選擇方案使得\(B\)的點權和為\(k\)。
solution
一個點能被\(B\)選上,必定是這個點與另一個點權比它大的點的連邊至少有一條被選上,而且該點與比它小的點的連邊都沒有被選上。按照這個即可算出答案。
時間復雜度:\(O(n)\)
K. 2018
題目描述:給定\(a, b, c, d\),求出滿足\(a\leq x \leq b, c\leq y \leq d, xy=2018\)的數對\((x, y)\)的個數。
solution
容斥原理。
時間復雜度:\(O(1)\)
2018 年“三盟科技杯”中國大學生程序設計競賽(湖南)