寒假集訓 1 24 1 25

2022-09-17 23:51:15 字數 2647 閱讀 3031

1月25shayndel

時間段

記錄

備註

8:00---8:30

8:30---9:00

二進位制狀態壓縮&&hamilton路徑

9:00----9:30

9:30---10:00

10:00—10:30

休息10:30---11:00

成對變換&&lowbit運算

11:00---11:30

11:30---13:30

13:30---14:00

14:00—14:30

lowbit運算&&map

14:30—15:00

高一熱假熱身賽

15:00—15:30

15:30---16:00

看書(遞迴&&遞推)

16:00---16:30

16:30---17:00

17:00---18:30

18:30—21:30

分享交流:

(待書寫)

附:可以貼各種資料或題解

1.24

0x01 位運算

快速冪取模:

要點:1.通過對每個底數取模,降低底數規模。

1 int sum=1;

2 a=a%mod;

3 for(int i=1;i<=b;i++)

4 sum*=a;

5 sum%=mod;

2.把指數轉化為2進製,再通過手段縮小指數的規模,用1的方法進行取模。若指數為偶數,兩兩合併。如7^16%mod=(7%mod)^16=(49%mod)^4=(49%mod)*(49%mod)^2···

1 #include 2 using namespacestd;

3 long long ksm(long long di,long long zhi,long longmod)

12 returnans;

13 }

64位乘法:

類似快速冪思想,*變為+即可。

1 long long gcqm(long long a,long long b,long long mod)

9 returnans;

10 }

2.a*b % mod=a*b-[a*b/mod]*p  表示向下取整

1 long long gcqm2(long long a,long long b,long long mod)

1.25二進位制狀態壓縮

hamilton路徑

這道dp的思路是floyd,用二進位制進行狀態壓縮。用乙個n位的二進位制數表示狀態,若第i為為1,則表示第i個點已經被經過。因此我們定義乙個陣列f[i,j]表示」點被經過的狀態」對應的二進位制位為i,且目前處於點j時的最短路徑。

此時dp方程為f[i][j=min(f[i][j],f[i^1<

1 f[1][0]=0;

2 for(int i=1;i<1

3 for(int j=0;j)

4 if(i>>j&1)

5 for(int k=0;k)

6 if((i^1<>k&1)

7 f[i][j]=min(f[i][j],f[i^1

8 cout<

邏輯運算的運算順序成對變換對於非負整數n

當n為偶數時,n xor 1=n+1

當n為奇數時,n xor 1=n-1

所以0與1,2與3,4與5 關於xor 1 的計算成為成對變換。

lowbit運算

對於非負整數n在二進位制表示下「最低位的1以及後面所以的0構成的數值」。

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

gcc編譯器內建函式

int_builtin_ctz(unsigned int x)

int_builtin_ctzll(unsigned long long x)

返回x的二進位制表示下最低位的1後邊有多少個0

int_builtin_popcount(unsigned int x)

int_builtin_popcountll(unsigned long long x)

map

寒假集訓 Find Metal Mineral

題目鏈結 題意 給出一顆生成樹,1 n 10000,在某乙個節點有k個機械人 k 10 然後機械人從這裡開始走,要求遍歷完節點,隨便停到什麼地方.求最少的路程總和.題解 樹形dp,關鍵是dp u i i的定義,因為機械人可能從子樹再跑回來,然後為了避免重複討論,應該定義為 在u為根的子樹上停了幾個機...

寒假集訓總結

寒假的訓練以不太順利的結果結束。整個寒假訓練都是兩天一場學長抓的訓練賽,然後補題,由於自己比較菜以及一些莫名的因素,導致訓練賽打得比較差,尤其是後幾場。訓練賽沒能打好的原因可能與狀態關係確實很大,但其中肯定與實力有關吧。總結一下,這些題目,演算法和思維上難倒自己的好像也沒幾道 後來補出來的 但是賽場...

ACM寒假集訓

出自 南昌理工學院acm集訓隊 什麼是dfs?void dfs 狀態 a 1.判斷狀態是否合法。合法繼續執行,否則則回到上次呼叫 2.先下走一層,也就是呼叫dfs a void dfs 引數用來表示狀態 if 越界或者是不合法狀態 return if 特殊狀態 剪枝 return for 擴充套件方...