牛客練習賽77

2022-06-21 05:12:15 字數 2780 閱讀 2869

預備知識

整數分塊

整數分塊用來求類似如下的問題。

\(給定正整數n,求 \sum_^n[\frac]\)

\(性質1:設f(n) = [\frac], f是單調不增函式。\)

證明\(對任意的x,f(x+1) - f(x) = [\frac] - [\frac]。\)

\(由於\frac < \frac,那麼[\frac] <= [\frac]。\)

\(那麼f(x+1) - f(x) <= 0。 得證。\)

\(性質2:設集合p,自然數k。若任意的x \in p都有f(x) = k,一定有p = [l, r]。\)

\(換言之,下取整函式值相等的自變數一定落在連續區間內。\)

\(由性質1即得。\)

\(性質3:f(x) \ge 1。\)

\(這是由於x <= n。\)

\(性質4:給定n,任意給出正整數n,以及某一連續區間的左端點l,一定可以\)

\(求出這個區間的[\frac],以及右端點r。設[\frac] = c。\)

\(證明:\)

\(1. 證明由n與l一定可以求出c。\)

\(由於l \in [l, r],由性質2,f(l) = c。\)

\(2. 證明由n與l一定可以求出r。\)

\(我們定義w=[\frac],可以證明r=w。\)

\((1) 證明w \in [l, r]。\)

\(由定義,若f(w) = c, 那麼c+1>\frac \ge c,即\)

\(n \ge c \times w 與\)

\(n < (c+1) \times w 同時成立\)

\(帶入w,有\)

\(n \ge c \times [\frac] ①\)

\(n < (c+1) \times [\frac] ②\)

\(①等價於 \frac \ge [\frac],顯然成立\)

\(②等價於\frac < [\frac]。\)

\(將等號左邊變形,易有\)

\(1 - \frac < [\frac],即\)

\(1 < [\frac] + \frac。\)

\(由性質3,[\frac] \ge 1,不等式成立。\)

\(於是,w \in [l, r]得證。\)

\((2) 證明 \forall x \in [l, r], x \le w。\)

\(即證明最大性。\)

\(即證,\forall x, x \le [\frac]}]。\)

\(由於x \le n, 易知n = kx + t,其中t < x。\)

\(原式等價於\forall x, x \le [\frac]}]\)

\(由於\frac = k + \frac < k + 1\)

\([\frac] = k。\)

\(原式等價於\forall x, x \le [\frac]\)

\(而[\frac] = [x+\frac] \ge [x]\)

\(故原式等價於\forall x, [\frac] \ge [x] = x,得證。\)

\((1)(2)證畢。\)

演算法實現

以\(給定正整數n,求 \sum_^n[n/i]\)

為例。

ll ans = 0;

for(int l=1, r; l<=n; l=r+1)

複雜度分析

\(對於i < \sqrt,最多有\sqrt種答案;\)

\(對於i>\sqrt,由於\frac < \sqrt,也最多只有\sqrt種答案。\)

\(迴圈最多隻會迭代2\sqrt次,時間複雜度o(2\sqrt) = o(\sqrt)。\)

預備知識

手寫hashmap

挖坑xor

性質1 \(a \oplus b = c \oplus d 等價於 a \oplus c = b \oplus d\)

性質2 $a \oplus b = c 等價於a \oplus c = b $

實現思路假了,這題卡stl

可以手寫乙個hashmap,不想手寫hashmap的話可以這樣解決

\(題目等價於 x \oplus y = (1 << i) \oplus (1 << j)\)

\(由性質1 等價於 x \oplus (1<

\(可以用map存一下所有x \oplus (1<

\(這裡出現了乙個問題,滿足 x \oplus (1<

\(異或存在兩個1的,如果i = j了那麼結果裡只有乙個1\)

\(考慮所有x, y的可能性\)

\(a. x = y, i \neq j, 此時x \oplus (1<

\(b. x \neq y, i \neq j,此時分兩種情況\)

\(1. x \oplus (1<

\(即,x \oplus (1<

\(2. x \oplus (1<

\(c. x = y, i = j, 此時x \oplus (1<

\(每乙個x = y只會被遍歷一次。即,x \oplus (1<

\(d. x \neq y, i = j, 此時x \oplus (1<

\(綜上所述,對於x \oplus (1<

\(在列舉y \oplus (1<

\(x = y 且 i = j的次數容易想到是x=y的組數 * i的個數\)

這個思路說人話就是

\(給a消去乙個1,給b再消去乙個1,看看最後相等的組數\)

\(消去的1相同的那些組是不合法的,此時找a = b的對數即可\)

\(消的過程中難免因為順序會出現重複,/2即可\)

牛客練習賽9

時間限制 c c 1秒,其他語言2秒 空間限制 c c 32768k,其他語言65536k 64bit io format lld 珂朵莉想每天都給威廉送禮物,於是她準備了n個自己的本子 她想送最多的天數,使得每天至少送乙個本子,但是相鄰兩天送的本子個數不能相同 珂朵莉最多送幾天禮物呢 第一行乙個整...

牛客練習賽15

時間限制 c c 2秒,其他語言4秒 空間限制 c c 262144k,其他語言524288k 64bit io format lld 第一次期中考終於結束啦!沃老師是個語文老師,他在評學生的作文成績時,給每位學生的分數都是乙個小於10的非負小數。amy 8.99999999999999999999...

牛客練習賽5

給你n個正整數,n 5,每個正整數大小不超過1000,最初su m 0 sum 0 每次可將su m sum 按順序加上陣列中的數,加完之後可以對sum的數字進行全排列,求最終能達到的最大值。由於n只有5,所以按照題意模擬dfs實現就可以了,注意最後一組也可以按數字進行全排列。d題 include ...