2023年8月12日訓練日記

2021-08-06 03:23:03 字數 1107 閱讀 4666

集訓時間已經過了一半,自打從高三以來時間觀念一直比較重,有個定理說你完成一件事總比你預計中要花費更多的時間,對於我這種拖沓的人非常適用,還是那句話:改嘛。學而不思則罔,思而不學則殆,學習要講方法,但只有方法還不夠,主要還是去做啊。

說一說單調佇列吧,

單調佇列:佇列中元素之間的關係具有單調性(注意一般是嚴格單調的),而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。

單調佇列的常用操作如下:

(1)插入:若新元素從隊尾插入後會破壞單調性,則刪除隊尾元素,直到插入後不再破壞單調性為止,再將其插入單調佇列。

(2)獲取最優(最大、最小)值:訪問首尾元素。

一般的情況下單調佇列有兩種建立方式:

(1). 用q陣列存放數值,id陣列存放對應下標

int head1=1,tail1=0;

for(i=1;i<=n;i++) //建立乙個遞增佇列

(2).直接用q陣列存放下標,

int head=1,tail=0;

for(i=1;i<=n;i++) 建立乙個遞增佇列

對於二分的題目說幾點要注意的:

(1).按精度輸出盡量用cout<

(2).當對double取絕對值用fabs而不是abs,

(3).上下限調整,我有理解的一點是這樣,比如說以下**,說farmer john有m頭奶牛要安置,牛盡量遠,求最近的兩個牛間距離最大是多少

while(leftmid)    

}

if(num>=m) left=mid+1; //如果num=m說明可以放的下m頭牛,但為了取更大這時候要讓left=mid+1,也就讓mid去嘗試更大的值

else right=mid;

}printf("%d",left);

還有一種輸出方法:

while(leftmid)   //注意是大於號不是大於等於號

}if(num>=m) left=mid+1;

else

}printf("%d",ans);

2023年8月12日訓練日記

今天訓練的主要目的是複習二分三分的相關知識和單調佇列的相關知識。但是仍然對單調佇列還不熟悉。還是不能夠熟練掌握運用。又看了課件,發現有的地方還是不理解。看了單調佇列的一些基礎題目有的還是不能完全理解。二分基本可以掌握,遇到水題能快速1a,但是遇到難題光是想到二分都有些困難,更不用說理出思路並寫出正確...

2023年8月2日訓練日記

今天訓練的主要目的是做完剩下的幾道比較麻煩的搜尋題。其中冰壺 數獨和網路破壞者是dfs,糖果玉公尺孩子是bfs 雖然沒有a掉,但是正在尋找原因,而且絕對是bfs 這些題目都不是前兩天的單純的套搜尋的模板,均是在搜尋的基礎框架上加一些其他的條件以及其他的變化來求得結果。在經過前兩天的水題訓練後,我已經...

2023年8月3日訓練日記

今天訓練的主要目的是a掉搜尋練習中糖果玉公尺孩子,看一些圖論的相關知識。糖果玉公尺孩子中要分三種路線 靠左走 靠右走 最短步數 求最短步數用bfs很容易就能解決,但是一直靠左走和靠右走就比較麻煩,因為走每一步,它的方向都有可能改變,下一步方向的優先順序也會改變。我用了3種辦法,全是mle,無奈之下只...