2019 7 22訓練總結

2021-09-25 11:57:19 字數 1587 閱讀 5326

今天學習了一些基本演算法,理解了快速冪,快速乘,lowbit運算和狀態壓縮的基礎實現。狀態壓縮還不會用。

快速冪:

求a^b 從b的二進位制最低位開始,如果當前位為1 就將a乘到結果裡面去,每左移一位a就乘方一次。

**實現:

int power(int a,int b,int p)

return ans;

}

快速乘

求a*b 從b的二進位制最低位開始,如果過當前位位1就將a+到結果裡面,每左移一位a就乘2.

**實現:

long long mul(long long a,long long b,long long p)

return ans;

}

lowbit運算

lowbit(n)定義為非負整數n在二進位制表示下「最低位的1及其後邊所有的0」構成的數值。

lowbit(n)=n&(~n+1)=n&(-n)

lowbit運算配合hash可以找出整數二進位制表示下所有是1的位

思想:每用一次lowbit運算求出1後記錄位置,然後再n=n-lowbit(n),使剛求出的為1的二進位制位變成0,迴圈操作,求出所有的二進位制位為1的位置。

當n較小時,另h[2^k]=k

const max_n=1<<20;

int h[max_n+1];

for(int i=0;i<=20;i++)h[1<>n){

while(n>0){

cout<二進位制狀態壓縮的基本操作

取出整數n在二進位制表示下的第k位 (n>>k)&1

取出整數n在二進位制表示下的第0~k-1位 n&((1<

宣告:bitset<10000>s;

表示乙個10000位二進位制數,<>中填寫位數。

~s 返回對bitset s 按位取反的結果。

&,|,^ : 返回對兩個位數相同的bitset執行按位與、或、異或運算的結果。

>>,<<:返回把乙個bitset右移、左移若干位的結果

==,!=:比較兩個bitset代表的二進位制數是否相等

操作符s[k]表示s的第k位,既可以取值也可以賦值

在10000位二進位制數中,最低位為s[0],最高位為s[9999]

count

s.count()返回有多少位為1

any/none

若s所有位都為0,則s.any()返回false,s.none()返回true

若s至少一位為1,則s.any()返回true,s.none()返回false

set/reset/flip

s.set() 把s所有位變為1

s.set(k,v)把s的第k位改為v,即s[k]=v

s.reset() 把s所有位變為0

s.reset(k) 把s的第k位改為0

s.flip()把s的所有位取反

s.flip(k)把s的第k位取反

狀態壓縮的基本操作都理解了,但是還是不會用於解題,下一步看一下八皇后的狀壓解法以進一步理解狀態壓縮。

2019 7 22集訓總結

今天上午看了位運算的部分知識,複習了以前看過的遞迴,學習了快速冪,對書上的例題深入挖掘了一下,下午把 熟悉了好幾遍,看懂了位運算在快速冪中的應用。晚上打了比賽,讓我意識到自己和別人的差距,還有很長的路要走。堅持下去的才是勝利者,心態的問題,計畫的問題,都是我要不斷改進的問題。不管怎麼樣,放手去幹,下...

2019 7 22 匈牙利演算法,KM演算法

這幾天知識點量太大,一時間不易吸收。先占個坑,慢慢填 分享一位博主dark scope的思路,簡單易懂還有趣,雖然是初學,也馬馬虎虎懂了個大概 define maxn 100000 int n,m n個男生 m個女生 二分圖 男生在左女生在右 bool line maxn maxn 兩者之間相互喜歡...

暑假訓練總結 SSL暑假訓練總結

第一周過的還算好吧,覺得飯堂伙食也挺好的,同學也挺好。學習的東西感覺比小學難好多,有種覺得以前學的東西太簡單了的感覺,但多虧了小學的時候基礎打得還算紮實,學得還行,但總是感覺自己就是個菜雞,就是乙個蒟蒻,哎,室友真的太強了。第一周總結 第二週自我感覺挺不錯的,總算追上了部分室友,成績也開始 這一切都...