各种有用的东西、黑科技、技巧
轉自WerKeyTom_FTD的blog
1、整體二分及cdq分治實現時,每個區間不需要單獨開隊列。可以把操作弄到一個數組了,然后多兩個參u、v表示這個區間的操作在u~v,做完后對每個操作打標記表示是否往右區間傳即可。
2、兩個long long相乘取模怎么辦?
第一種是快速乘,類似快速冪,復雜度多了個log
第二種是找一個比較小的數,然后搞一波,詳見代碼
第三種來自Yves___的博客long long相乘取模黑科技
LL mult( LL A, LL B, LL Mo ) {LL temp = ( ( LL ) ( ( db ) A*B/Mo+1e-6 ) * Mo );return A*B - temp; }大概意思就是強制轉double然后搞一波再轉回來。
3、unique()可以刪除重復元素,然后返回刪除重復元素后的末端地址。
下面這段代碼即可實現離散化。
4、可以用調用ctime,運用clock()獲取程序運行至該語句時的時間(默認ms)
#include<iostream> #include<ctime> using namespace std; int main() {int n=0;//start=clock();while(n<100000000)n++;cout<<(double)clock()<<endl;return 0; }5、調用頭文件bits/stdc++.h就相當于包括了好多庫……
6、如何打偽隨機數?
7、對拍(從前一直用c++對拍的蒟蒻就是他(還有我本人))
在程序的目錄下建立.txt文件,輸入:
把文件擴展名名改成.bat
8、關于可持久化,記住以下幾點:
1:一個點的信息要被修改時需要對其新建。
為了節省空間,一個點的信息不被修改時就沒必要新建了。
例如合并一個結點與空節點,此時不需要新建。
2:為了節省空間,如果對空節點進行newnode我們直接返回空節點。
3:打標記也涉及修改信息,不要忘記newnode。而down的時候其實并不用,因為修改的是兒子的信息。
9、從OJ上看來一句話,不知道來源。
OI比賽的題目無非三種,從暴力到優化,從一般到特殊,重新定義題目。
10、O(n)求出1~n對于質數MOD的逆元。
來自鏈接
inv[i] = ( MOD - MOD / i ) * inv[MOD%i] % MOD
證明:
設t = MOD / i , k = MOD % i
則有 t * i + k == 0 % MOD
有 -t * i == k % MOD
兩邊同時除以ik得到
-t * inv[k] == inv[i] % MOD
即
inv[i] == -MOD / i * inv[MOD%i]
即
inv[i] == ( MOD - MOD / i) * inv[MOD%i]
證畢
總結
以上是生活随笔為你收集整理的各种有用的东西、黑科技、技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android pay 机型,苹果有Ap
- 下一篇: 软件开发中产品与项目区别