【FBI WARNING】一些Noip的黑科技 持续整理!
有疑問或錯(cuò)誤盡管評(píng)論!!?
下面以C++為準(zhǔn)。
?本文手(粘)打(貼)于各大博客之間 有問題。。。。。 我也不懂
max、min的優(yōu)化
我們知道,打max、min時(shí),要用分支(if語句)。這樣會(huì)使程序超慢。
有沒有其他方法?有的。?
當(dāng)x<0時(shí) x>>31=-1 (11111111111111111111111111111111)?
當(dāng)x>=0時(shí) x>>31=0(00000000000000000000000000000000)
所以我們可以通過作差,求出誰大誰小。
int max(int a,int b) {int m=(a-b)>>31;return a&~m|b&m; } int min(int a,int b) {int m=(a-b)>>31;return a&m|b&~m; }以max舉例,?
當(dāng)a>=b時(shí),m=0,所以max(a,b)=a&~0|b&0=a&-1|b&0=a?
當(dāng)a< b時(shí),m=-1,所以max(a,b)=a&~-1|b&-1=a&0|b&-1=b
?
補(bǔ)上一個(gè)abs的優(yōu)化:
int abs(int a) {int b=a>>31;return (a+b)^b; }當(dāng)a>=0時(shí) b=0 abs(a)=a^0=a?
?
當(dāng)a<0時(shí) b=-1 abs(a)=(a-1)^-1=-a(相信大家都懂補(bǔ)碼的轉(zhuǎn)換方式)
?
有一點(diǎn)很重要的是,不要亂用!比如不能硬是將int改為long long,注意右移的位數(shù)要變!
?
手動(dòng)編譯優(yōu)化
格式:
#define x y在程序中,一切出現(xiàn)x的地方都會(huì)變成y。?
可以省碼量,增強(qiáng)可讀性。
有種帶參數(shù)的,在名字(x)后打空格,里面寫參數(shù)(用逗號(hào)隔開,不用標(biāo)類型)?
例如#define max(a,b) ((a)>(b)?(a):(b))?
但是要記住它的本質(zhì),它只是單純的替換。若不加括號(hào),也許會(huì)出現(xiàn)各種運(yùn)算順序的錯(cuò)誤。還有,不要將長的式子、函數(shù)、++或–放進(jìn)去。不然會(huì)計(jì)算多遍,時(shí)間也許會(huì)炸。?
取消宏定義:
不解釋?
還有其它的不怎么會(huì)用到,有興趣的同學(xué)可以上網(wǎng)搜。?
補(bǔ)上懶人的文件輸入輸出:
?
#define I_O(x) freopen(""#x".in","r",stdin);freopen(""#x".out","w",stdout);?
cstring中常用的函數(shù)
這些函數(shù)應(yīng)該人人都會(huì),但還是有好多人不會(huì)。
先說一下指針與數(shù)組的關(guān)系。?
若有數(shù)組int a[N];?
則a表示a[0]的地址(&a[0])?
*a即是a[0]?
a+i=&a[i]?
*(a+i)=a[i]
memset(指針(數(shù)組名),數(shù)值(最大127,最小128,清零0),大小(sizeof ……))?
用法就是將一數(shù)組初始化。?
memcpy(指針A,指針B,大小SIZE)?
將B出復(fù)制SIZE這么多的內(nèi)存到A處。
排序
sort(指針begin,指針end)?
將begin到end-1的元素以operator<進(jìn)行快速排序。?
sort(begin,end,cmp)?
將begin到end-1的元素以cmp進(jìn)行快速排序。?
有的孩子不知道cmp咋搞。?
比如從大到小排序
a代表前面的元素,b代表后面的元素。表示排序后的序列滿足a>b!
?
穩(wěn)定性排序:?
stable_sort(begin,end);?
steble_sort(begin,end,cmp);
堆
queue里有一個(gè),但我不愛用,因?yàn)閮?nèi)部一定有許多繁雜的操作,比如指針開辟一個(gè)存儲(chǔ)空間,會(huì)使程序變慢。?
我用algorithm里的堆。?
先注意一下比較函數(shù)int cmp(int a,int b)?
a表示后代,b表示祖先,滿足一個(gè)這樣的順序。(可以理解為大根堆)?
make_heap(begin,end)?
將begin到end-1的元素變成大根堆?
make_heap(begin,end,cmp)?
將begin到end-1的元素以cmp的順序變成大根堆?
push_heap(begin,end)?
push_heap(begin,end,cmp)?
前面begin到end-2已滿足堆的性質(zhì),將end-1的元素放進(jìn)堆?
?
pop_heap(begin,end)?
pop_heap(begin,end,cmp)?
將begin的元素彈出,移至end-1處。
?
轉(zhuǎn)載于:https://www.cnblogs.com/_Yrh/p/9240133.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【FBI WARNING】一些Noip的黑科技 持续整理!的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信零钱通还信用卡如何免手续费?几种免费
- 下一篇: JAVA 框架-Spring-AOP面向