原创 洛谷P3868(中國剩餘定理,快速乘)

題目鏈接 根據題意,有n−ai≡0(mod bi)n-a_i\equiv 0(mod  bi)n−ai​≡0(mod bi) 根據同餘變換法則,可以得到n≡ai(mod bi)n\equiv a_i(mod  bi)n≡ai​(m

原创 洛谷P1032

題目鏈接 一個比較簡單的DFS題,數據範圍很小,直接暴力即可。 DFS問題關鍵的一點是剪枝,寫搜索問題的時候應該自然而然地想到剪枝,並且儘可能的降低時間複雜度 幾個比較常見的剪枝技巧: 1.已經超過之前的最優解,可以直接retur

原创 6.28隨筆(C++類的多態性和虛函數)

C++中類的多態性通過虛函數來實現 虛函數與純虛函數 虛函數 定義方法:在基類的函數前面加上virtual關鍵字 定義某個函數爲虛函數是爲了能夠使用基類指針來調用派生類函數 #include <iostream> using na

原创 洛谷P1825

題目鏈接 一個BFS,雖然洛谷難度標籤是提高,但是感覺還行。 很熟悉的傳送門,比較特殊的地方是需要剪枝(可能是因爲我題目刷少了,還沒遇到過BFS剪枝 AC代碼: /* * @Author: hesorchen * @Date:

原创 牛客計算係數(Lucas+二項式定理)

題目鏈接 隱隱約約記得展開式和組合數的關係,但是記不起來,百度了才知道二項式定理。 (x+y)n=C(n,0)×xn×y0+C(n,1)×xn−1×y1+C(n,2)×xn−2×y2......+C(n,n)×x0×yn(x+y)

原创 牛客病毒感染

B.病毒感染 題意:給出一顆所有路徑都爲1的樹,讓你找出到其餘點距離和最小的點,若存在多個,都輸出。 暴力法:跑n邊迪傑斯特拉,n>=5e5,顯然不行。 試着畫圖模擬找思路: 上圖中,1到其餘各點的距離和爲7(1+1+1+1+1

原创 牛客組合數問題

題目鏈接 這個題略毒瘤,很簡單的組合數(帕斯卡公式)+毒瘤前綴和 衆所周知,使用帕斯卡公式可以預處理出組合數,而且是類似楊輝三角。 這題中的前綴和是二維前綴和,求8 3時,答案是紅色區域而不是整塊減去綠色區域。主要還是審題不夠仔細

原创 Lacus定理—-求較大組合數

之前介紹的費馬小定理,用來處理C(n,m)C(n,m)C(n,m)組合數取模ppp,要求ppp爲質數,n,mn,mn,m小於1e51e51e5(應該是受階乘數組限制,1e61e61e6差不多也行) 當n、mn、mn、m達到1e8、

原创 51nod2657二進制數字

2657 二進制數字 題目大意:長度爲nnn的010101串,問總共有多少串滿足不含三個連續的000或111,n<=1e5n<=1e5n<=1e5,輸出答案取餘1e9+71e9+71e9+7 方法一:找規律,可以發現a[i]=a[

原创 牛客週週練8

A.買彩票 我果然是DP廢物 昨天這題沒什麼思路,只會用DFS跑,但是30次不剪枝不記憶化肯定是不行了,早上看了一下別人題解,可以用dp來做。用dp[i][j]表示買i張彩票總共中了j元,最後統計方案數即可。 狀態轉移: for

原创 6.13隨筆(牛客練習賽C二維動點)

好好打比賽每場都或多或少有些收穫,昨天被牛客的C卡死,細節滿滿,今天早上又寫了很久,收穫還是蠻大的 輾轉相除法求最大公約數 原理什麼的就不說了,我之前的寫法都是 ll gcd(ll x, ll y) { return (x

原创 跳石頭———經典二分

傳送門 可能是今天狀態不好,一個很簡單的二分,挺早之前就ac過了,但是今天牛客遇到了,發現寫不出來,說明當時還沒搞懂。 題意不說了,這裏就說一下幾個點: 1.在什麼情況下才可以搬掉石頭? 應該是石頭2到石頭1的距離小於二分出的答案

原创 6.10隨筆(關於C語言float和double類型的精度問題)

先看下面的代碼以及輸出: int main() { double a = 80.845; float b = 80.845; printf("%.2lf %.2f\n", a, b); doubl

原创 STL數組第k小數函數

在一個數組中,要找第k小數,很多人的第一反應應該都是sort然後直接輸出。但是昨天就被5e6卡了nlogn,這時候,stl裏的一個函數就可以上場了:nth_element() 這個函數有四個參數: 1.first 容器開始位置 2

原创 6.3隨筆(類中的友元以及靜態)

今天摸魚時間不算長,期末了,作業什麼的比較多 C++友元函數以及友元類 友元函數 先直接給出性質: 類的友元函數定義在類外部,但有權訪問類的所有私有(private)成員和保護(protected)成員。 儘管友元函數的原型有在