一些零碎的知識
2n<= n! <= nn
108->超過了可能會tle
231 - 1 = 2147483647
long long -> 263-1
unsigned -> 232-1
計算變數所佔的空間
8位二進位制 = 1個位元組
1024位元組 = 1kb
1024kb = 1mb
1024mb = 1gb
比賽時題目的空間限制位為512m,在沒有遞迴等其他消耗下,且只需要開乙個int型的陣列,那麼這個陣列最大可以開到什麼數量級
512 * 1024 * 1024 * 8 / 32
可以近似為->108
乙個長度為10^6的double型別陣列佔多少空間(數量級)
106 * 64 / 8 * 1024 * 1024
-> 8m
列舉一一枚舉,不重複,不遺漏
優化列舉的基本思路:減少列舉次數
選擇合適的列舉物件
選擇合適的列舉方向——方便排除非法和不是最優的情況
選擇合適的資料維護方法——轉化問題
字首和給乙個數列(1≤n≤100000),有q(1≤q≤100000)此詢問,每次詢問數列的第li個元素到第ri個元素的和。
用sum[i]儲存前i個數的和,那麼sum[i] = sum[i - 1] + a[i],當我們要查詢第li個元素到第ri個元素的和時,用sum[ri] - sum[li - 1]即可
這樣單次查詢為o(1),總複雜度為o(n + q)
sum[i] -> 字首和
差分給乙個數列(1≤n≤100000),有q(1≤q≤100000)此修改,每次把數列中的第li
到第ri的每個元素都加上乙個值ki,求所有的修改之後每個數的值。
——將對區間的修改變為對區間端點的修改
考慮在區間加的過程中,有什麼值是在區間端點處發生變化,而區間內是沒有變化的?
-> 是每個數與前乙個數的差值
考慮用陣列delta[i]來維護第i個數和其前乙個數的差值(可以預設第乙個數前面有乙個0),然後當需要將[li, ri]區間的每乙個數+ki時,只需要修改delta[li]和delta[ri + 1]即可
最後,對delta[i]求一次字首和,就可以得到數列每個元素的值。
用陣列delta[i]來維護第i個數和其前乙個數的差值的辦法為差分
差分和字首和是對稱的操作
-> 對差分陣列求字首和為原陣列
-> 對字首和求差分也會得到原陣列
校門外的樹
講解時提到了離散化
給定長度為n的整數數列以及整數s,求出總和不小於s的連續字串的長度的最小值,如果解不存在,則輸出0
->尺取法 時間複雜度o(l+r)
可以試一下這個題目來練練手
poj - 3061
熄燈問題
->第一列列舉,剩下的推理
類似的題目
poj - 3279
位運算位運算比數值運算快
^1 取反 ^0沒變
^1^1 沒變· ^0^0沒變
a=a^b;
b=a^b;
a=a^b;
實現了交換
a』 = a^b;
b』 = a』^b = a^b^b = a;
a』』 = a』^b』 = a^b^a = b;
負數在計算機中以補碼的形式儲存
補碼:原碼取反+1
貪心在對問題求解時,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。
能夠使用貪心演算法的問題都是能嚴格證明貪心出的區域性最優解就是所求的全域性最優解。
每次都選看起來最好的。
例題3在0到l的數軸上有n個區間[li, ri],現在需要你選出其中進項多個區間,使其兩兩不相交。(n <= 100000)
->選擇結束時間盡量早的
->提到了迴圈不變式
例題4給n個活動,每個活動需要一段時間ci來完成,並且有乙個截止時間di,當完成時間ti大於截止時間完成時,會扣除ti - di分,讓你找出如何使用使自己所扣分的最大值最小(n <= 100000)
最後推出->da <= db
例題5 國王的遊戲
最後推出 -> lara <= lbrb
第一期題目的位址
最後的碎碎念
彈幕的大家都好可愛啊
dp=單排
簽到=ak
提交=ac
哈哈哈哈哈哈哈哈哈哈哈當時看彈幕的時候笑死
看到彈幕發現大家都好強,自己也要加油!因為太菜了**還沒附上,等做出來的應該會附上**的。
演算法競賽入門筆記整理
判斷是否為素數 int is prime int n 字串格式轉換sprintf函式 sprintf 儲存的字串,輸出格式控制符 要儲存的對應格式資料 c 需要指定標頭檔案的輸入輸出流和命名空間後,才能使用cin等函式 includeusing namespace std 宣告靜態常量可以用 con...
牛客網 學習筆記整理
2017 11 11 2017 12 03 八次課程整理,寫在每篇散落的部落格中,此部落格為總結目錄,方便以後查詢。近期會不斷更新,可能會比較慢 最近好忙,捂臉逃跑中 03 17 2018 更新 將全部九次課的內容目錄貼在下面這篇部落格中,只提供思路,不貼 方便以後查閱。目錄部落格 1 各大排序演算...
牛客C 錯題筆記整理
動態繫結是物件導向程式設計語言中的一種機制。這種機制實現了方法的定義與具體的物件無關,而對方法的呼叫則可以關聯於具體的物件。物件導向有三種特性 封裝 繼承 多型。其中多型性有兩種,一種是依靠函式過載實現的靜態繫結,一種是依靠虛函式實現的動態繫結。c 中的純虛函式,下面說法均正確 子類中必須覆蓋基類的...