「演算法競賽進階指南」 0x01 位運算 知識筆記
二進位制是計算機的根本!
你瞭解她它嗎?
int lowbit(int x)
{
return x&(-x);//x&(~x+1),~x=-1-x;
}
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)
返回x的二進位制表示下有多少位為1
相關推薦
「演算法競賽進階指南」 0x01 位運算 知識筆記
二進位制是計算機的根本! 你瞭解她它嗎? int lowbit(int x) { return x&(-x);//x&(~x+1),~x=-1-x; } int __builtin_ctz(unsigned int x) int __builtin_ctzll(unsigned l
藍書(演算法競賽進階指南)刷題記錄——POJ1094 Sorting It All Out(floyd)
題目:POJ1094. 題目大意:給定n組不等關係,格式為x<y.現在要求輸出最早能夠確定唯一順序或產生矛盾的位置,或輸出沒有這樣一個位置,若有唯一順序要輸出順序. 注意這道題的輸出格式. 這道題一看想到了差分約束,仔細一想用floyd跑差分約束,然後發現好像確實可做. 我
藍書(演算法競賽進階指南)刷題記錄——BZOJ2200 道路與航線(堆優化dijkstra+拓撲排序)
題目:bzoj2200. 題目大意:給出一張圖,其中無向邊權一定為正,且不可能有一個有向邊組成的環. 我們可以直接寫一個SPFA上去,發現TLE了,然後dijkstra又不能處理負權邊. 所以是時候拿出準備已久的神奇A*演算法了. 我們先將無向邊輸入,將所有無向連通塊用dfs打上
藍書(演算法競賽進階指南)刷題記錄——POJ3468 A Simple Problem with Intergers(樹狀陣列維護差分)
題目:poj3468. 題目大意:給定一個序列a,要求支援: 1.格式C a b c,表示將[a,b]的權值都加上c. 2.格式Q a b,表示查詢[a,b]的權值和. 線段樹裸題(我像個傻子一樣寫了個LCT做了一遍),可是我們這裡不用線段樹,我們討論樹狀陣列的解法. 我們已
藍書(演算法競賽進階指南)刷題記錄——POJ1734 Sightseeing trip(無向圖最小環)
題目:poj1734. 題目大意:給定一張無向圖,求這張無向圖邊權和最小的節點大於3個的環,若有解輸出任意一個方案,否則輸出“No solution.”. 這就是一個較為簡單的floyd應用. 我們可以先把floyd模板寫下來看看floyd有什麼特殊的性質: void floyd
藍書(演算法競賽進階指南)刷題記錄——POJ3613 Cow Replays(最短路+矩陣乘法)
題目:POJ3613. 題目大意:給出一張圖,然你求出經過N條邊後,S到T的最短路. 這道題一開始覺得挺容易的,用f[i][j]表示從起點到點i經過j的最短路,不斷更新就可以了. 但是突然發現數據巨大根本跑不過去... 然後就開始看書上的題解了... 書上居然要用矩陣乘法,好
藍書(演算法競賽進階指南)刷題記錄——CH3802 綠豆蛙的歸宿(DAG期望DP)
題目:CH3802. 題目大意:給定一張有向無環圖,一直蛙要從點1走到點n,它每次會等概率從一個點經過一條出邊走到下一個點,求從點1走到點n的期望路徑長度. 我們很容易看出這是一個期望DP. 那麼我們設狀態f[i]為從點1到點i時的期望路徑長度. 但是我們發現狀態轉移方程就十分不
藍書(演算法競賽進階指南)刷題記錄——POJ2976 Dropping tests(0-1分數規劃)
題目:POJ2976. 題目大意:給定你n組,讓你取出n-k組,使得這n-k組的a之和除以b之和最大. 這是一個經典的0-1分數規劃模型. 關於0-1分數規劃模型,一般就是確定一個標準值mid,發現: 若,那麼,也就是說. 同理,若,就是. 突然發現這個東西滿足二分性質.
藍書(演算法競賽進階指南)刷題記錄——POJ1639 Picnic Planning(度限制最小生成樹)
題目:POJ1639. 題目大意:給定一張無向圖,求這張無向圖的最小生成樹,其中這棵最小生成樹滿足節點1的度小於等於s. 我們對於一張圖,先將點1去掉,剩下的聯通塊內的的最小生成樹都求出,然後我們在列舉與1關聯的邊,將所有聯通塊與1只連一條最小的邊,這樣我們就求出了一棵最小T度生成樹,其
藍書(演算法競賽進階指南)刷題記錄——CH6201 走廊潑水節(最小生成樹)
題目:CH6201. 題目大意:給定一棵樹,讓你擴充成一張完全圖,使得原樹是這張完全圖的唯一最小生成樹,並輸出加的邊的最小邊權和. 這道題用了一個類似於Kruskal的東西,然後順便計算出了最小邊權和. 首先,我們將樹拆開,將邊排序,然後不斷用並查集合並. 每合併一次,我們設合併
藍書(演算法競賽進階指南)刷題記錄——POJ2728 Desert King(最優比例生成樹)
題目:POJ2728. 題目大意:給定一張無向完全圖,有邊權a和b,求出它的最優比例生成樹滿足a之和除以b之和最大. 我們發現這也是一個0-1分數規劃的模型. 根據0-1分數規劃的套路,我們二分一個比例mid,把這張圖的所有邊的邊權換成,然後跑一遍最大生成樹,判斷邊權和是否大於0即可
【演算法競賽進階指南】0x02CH0201-費解的開關
本題目最關鍵的問題是關於狀態壓縮,利用二進位制來判斷狀態 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int pic[6][6];//儲存輸入 int tmppic
【演算法競賽進階指南】字首和BZOJ1218鐳射炸彈
題目是二維字首和,N^2完成維護 S[i,j]=S[i-1,j]+S[i,j-1]+A[i,j],簡化操作資料直接輸入S中 題目中要注意目標的座標,往往被包含在x+1,y+1之中 #include<cstdio> #include<algorithm> using namespa
【演算法競賽進階指南】POJ1845Sumdiv
本題目是一道數論的綜合題目,主要的一個點就是利用二分法來求等比數列的和,其餘的點就是唯一分解定理分解質因數,還有就是快速冪 A^B約數和\(=(1+p_{1}+p_{1}^{2}+\cdot\cdot\cdot+p_{1}^{c1})*(1+p_{2}+p_{2}^{2}+\cdot\cdot\cdot+p
【演算法競賽進階指南】POJ3889分形之城
本道題目是利用遞迴,去把最後等級1的某個位置求出來,然後回溯向上去把上一等級的相應位置求出來,一般是右下角向左上右上左下擴充套件,根據旋轉的規律回溯計算 城市的規劃在城市建設中是個大問題。不幸的是,很多城市在開始建設的時候並沒有很好的規劃,城市規模擴大之後規劃不合理的問題就開始顯現。而這座名為 Fracta
【演算法競賽進階指南】POJ2018Best Cow Fences
二分法查詢答案 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; double a[100005],b[100005],
【演算法競賽進階指南】BZOJ3032七夕祭
兩次環形分牌 #include<cstdio> #include<algorithm> #include<iostream> using namespace std; const int maxn=100010; int x[maxn],y[maxn]; long lon
【演算法競賽進階指南】逆序對POJ2299Ultra-QuickSort
求逆序對需要用到的演算法是歸併排序,在排序的同時進行計算逆序對,改題目求冒泡的次數,實際上就是最少逆序對的個數,最小個數的話利用歸併排序中進行歸併的時候,如果左半邊有大於右半邊最小的值,能麼從該位置到左邊最後一個都與右半邊第一個構成逆序對,逆序對個數加上左邊個數,歸併排序利用遞迴,所以在本次排序的時候,左右半
【演算法競賽進階指南】貪心POJ3128Radar Installation
本題目是一道經典的覆蓋問題關於本題目要注意的問題是其中的變數有陷阱,就像做數學題一樣另外就是關於覆蓋的問題,因為是貪心,首先要去求出來每個建築所需要覆蓋的監控的區間其次就是對區間的左側進行排序,還需要一個pos進行維護當前安裝監控的位置,一般是區間右側每次安裝需要看pos和l[i]的關係,如果pos<[
【演算法競賽進階指南】HDOJ4699 Editor
進階指南中給了一個好玩的方法,對頂棧,與對頂堆有這異曲同工之妙,涉及左側棧的操作,都需要對儲存最大字首和的陣列進行維護 #include<iostream> #include<stack> #include<algorithm> using namespace std;