為了完成自己立下的flag,筆者決定開一篇部落格,將自己所學過的所有板塊進行梳理,也許工程量有些浩大,但筆者相信,自己一定可以成功。
通過區域性最優解構成全域性最優解
均分紙牌 題解
紙牌總數是一定的,把牌堆看成乙個序列,每個堆最後的紙牌數都應該是這個序列的平均數。所以就統計那些牌堆不為平均數即可。
#include
using
namespace std;
int a[
105]
,sum;
intmain()
sum/
=n;for
(int i=
1;i<=n;i++
) sum=0;
for(
int i=
1;i<=n;i++
) cout
}
首先,放句名言
90%的程式設計師無法正確實現二分查詢演算法二分主要利用了序列的單調性。假設乙個單調遞增的序列,那麼其中的任何乙個元素都比前面的所有元素大,都比往後的所有元素小。所以我們可以折半查詢某一元素
二分可以在o(logn)的複雜度中查詢序列的某一元素。
int l=
0,r=n+
1,ans=0;
while
(l<=r)
不會吧,不會吧,不會真的有人連搜尋都打不來吧
不會吧,不會吧,不會真的有人連dp都會打吧
因為搜尋和dp的知識太多了,所以筆者就單獨把它們列出來。
字首和可以用o(n)的時間複雜度對陣列進行預處理,然後再o(1)的時間之類求出任意兩個元素之間的元素和。
我們可以用乙個陣列sum來計算字首和,其中sum
isum_i
sumi
表示前i項的元素和。
所以很容易可以得到:sum
i=su
mi−1
+a
isum_i=sum_+a_i
sumi=
sumi
−1+
ai ,其中a
ia_i
ai表示當前元素的值。
如果我們要查詢第i項到第j項的字首和,就可以看成求1∼j
1 \sim j
1∼j項的字首和再減去1∼i
−1
1 \sim i-1
1∼i−
1項的字首和,所以就可以表示成sum
i−su
mj−1
sum_i-sum_
sumi−
sumj
−1。
可以在log的時間複雜度中判斷出兩個元素是否在乙個集合。
具體實現可以參考這篇部落格
當然,我還是要提一提
現在假設有一堆不同的元素,每幾個元素就組成乙個集合。
我們在每乙個集合當中選出乙個元素作為代表,那麼只要兩個元素所在集合的代表相同,它們就在同乙個集合裡面。
那如果我們想把兩個不同的集合合成乙個集合怎麼辦呢?
很簡單,只要將其中乙個集合的代表放在另乙個集合之中就可以了
模板如下
首先是初始化
void
make_set
(int n)
}
然後是查集
int
find
(int x)
最後是並集
void
join
(int x,
int y)
線段樹和下文將提到的樹狀陣列一樣,是解決區間問題的資料結構,但線段樹可以實現的功能比樹狀陣列多。
因為牽扯的東西有點多,所以就又開了一篇部落格,這裡就不展示了。
吖,這個東西不好講
那我們又開一篇部落格吧!!!
絕對不是因為我想水部落格
後面的有時間再寫吧。。。
7 7PHP所學知識總結
標籤中的屬性名分為 系統屬性和自定義屬性 系統屬性名 能查到的都為系統屬性 自定義屬性名 自定義的屬性,自己寫的,本地路徑 2.定位 點選的時候到指定的位置 1.設定錨點,給附近的標籤加id屬性 2.a標籤路徑指定到id屬性值 代表本頁 例如 a href bt8 跳轉標題八 乙個標題裡面只能有乙個...
7 9PHP所學知識總結
am 複習昨天所學 的應用 width 寬度 border 邊界 cellpadding 單元格內文字與邊框距離 cellspacing 邊距 pm 表單的學習 表單 收集使用者的輸入傳送到後台 提交方式 get 預設 form.html?zhanghao 123 mima qwe post在請求裡...
7 6PHP所學知識總結
h1 為標題 h1 h6 標題會逐漸變小 需更換標籤裡面的數字 如 標題 標題 標題 段落 常用!p 自動預設一行 基本常用 都為加粗文體 都為傾斜 下劃線這是重新整理格式 上標標籤 下標標籤 刪除線標籤 大字型大小標籤 小字號標籤 特殊符號 空格的意思 水平線標籤 br 換行 如果需要多重換行,則...