自用 每次NOIP模擬賽的總結 (無題面)

2021-08-22 13:25:10 字數 2798 閱讀 4556

我的最大缺點是思維混亂,特別是做數學題,變數的含義都搞混了

本來我設的x是 進行了x1次+a操作和x2次-b操作之後係數的和

然後有ax1+by1 =n ax2+by2 = m (每進行一次+a或-a,同時必須進行一次+b,-b,-b,+b,b取正負和a取正負是無關的,就像馬走日 先走1步橫再走兩部豎)

然後我竟然認為x1 = y2…因為我想你走乙個a同時也要走乙個b

但這樣的話x1就是淨操作次數了,但x1是各種不同操作的總和啊,他不體現操作次數。。

就做錯了orz

我應該把做法寫出來,沒錯,把我做了什麼都寫在電腦上,用文字規範我的邏輯

我的邏輯:設x1為多次操作後實際走了的係數,那麼把兩個式子加起來,最後的解x3 = x1 + x2不一定有意義,因為他不一定滿足走一次a走一次b

那麼找找規律,什麼樣的解x3 y3滿足題意,一定是走一次a走一次b的

發現x3 y3奇偶性相同才行

從0開始 a :+1 b:-1 發現總和a +1 b -1

然後a -1 b+1, 總和a 0 b 0

奇偶相同

然後發現我思維不嚴謹,t1的模擬打錯了,看來想出來做法,一定要在符合題意下嚴謹地找反例,而且如果這種做法特別麻煩,說明很有可能找錯了,我的缺點是有乙個特別優美的演算法,找了乙個不合題意,不存在的反例,有時候又想出來乙個特別麻煩的做法,沒有找反例。

模擬題目大意

水會不斷地往下下,有很多擋板,擋板有自己的高度,一塊水能夠存在,他左右下邊必須都有水或擋板

是模擬先遞減後遞增嗎??? 非也,反例很好找

而資料範圍達到了10^6之大

要找到一種方法,直接掃一遍

那麼換個角度做題,讓我算一共多少塊水,我不一定非要一大片一大片地算,我可以o(n)掃一遍,那麼把這些水拆開,考慮每個擋板上方會有多少水,乙個板上水的高度由他左右兩邊比他高的最小的兩個板來決定

##找反例的方法 增加法 在優美地的兩段中的一段加上一大段東西 或一點東西 看看會發生什麼,比如這道題,一段遞增一段遞減 我再一段遞增,想問題習慣由1推到2推到3至4到5 才能最大可能地保證不錯

拼接字串 321 32 誰在誰前面?

32321最好 但是321 字典序大於32 就很難受 不如把排序函式寫成「對答案貢獻大的可能情況 a排在b前面」 return a + b > b +a

這樣寫cmp函式 可以理解為兩兩比較後乙個個排好序,保留了對答案貢獻最大的排列,那麼這樣新串字典序就是最大的

然後是t3

一棵樹給出兩個節點,給出一條附加邊,問附加邊所連兩點是否分別在以給定的兩個節點的不同子樹中

首先他題給我們一棵樹,那麼我們最好畫的像樹,不然會把樹這種結構的性質忽略掉,就是說還是要畫地特殊點,別畫特別普適的情況,而且要把題意抽象出來,又不能亂來,搞得抽象地失去了這個題的「樣子」,比如說我一開始把圖僅僅是畫成了n個點n-1條邊的無向圖而不是樹,從而損失樹的性質

考慮樹上演算法,dp,lca,dfs序差分,字首和,樹鏈剖分

那麼判斷兩個點是否在不同子樹中,其實可以看做兩個點是否在不同dfs序區間中,dfs序非常有用,其實樹鏈剖分就是應用了dfs序,可以吧樹的問題轉化為區間問題

###然而如何想到這些演算法呢,這就有賴於總結了,先拿出所有學過的思想和演算法,然後總結其能幹什麼,適用於哪類問題

但是我們也可以用lca來判斷,就是慢和麻煩點

判斷乙個點是否為另乙個點的子節點,直接用dfs序就可以,但是可以繞點彎路用lca 若x是y的祖先節點 則lca(x,y) = x

然後分情況討論,因為附加邊所連兩點有可能是給定切斷的兩點的祖先

哎然後是思維題。。。講真這種題我真不會做,唯一想到的就是由特殊推一般,正難則反等形式

###多刷基本演算法題啊 什麼貪心模擬單調佇列單調棧位運算什麼的

##abc比賽。。。九月

注意dfs求組合數的時候若要在n個中選出m個

其實也可以看做保留n-m個 關鍵是m和n-m哪個更小

雖然最後底層節點數是相同的,但中間枝條數會不一樣

更小的引數會更好

在debug的時候注意,若乙個演算法中有自己新搞出來的想法。。。那麼很有可能這裡是錯的,比如說這個演算法本來一貫是這麼寫的

然後因為題目限制你改了一下,那麼改的這個地方就很容易出錯。。。比如說我有一次寫拓撲排序,本來先找所有入度為0的點入隊,因為我建了新圖,就直接遍歷了所有的邊,從裡面找入度為0的。。。但是這樣不對,因為可能把乙個點多次入隊,因為能有好多條起點相同的邊,所以還要標記

模擬題能自己寫二分就別lower_bound了,今天有個題讓我找<=x中最大的乙個我非得用lower_bound找》=x最小的那個。。。還有注意陣列大小問題,搜尋時用到的陣列要貼合資料,不要超出去太多了,比如

bool check()

jud[a[j]]=

1;}if

(!***)

return false;

}return true;

}

因為有memset,所以可能會爆棧,而且注意jud的大小,因為jud是套了jud[a[j]]

一些函式或迴圈內部的變數定義時初置設為0真的挺好的。。。我今天打了個二分查詢,當不存在比x更小的數時(全部大於x)按題意是返回0,但是我的二分裡返回的是ans的初始值(因為ans一直沒被更新),所以初始值設為0真的很重要

中秋NOIP模擬賽總結

既然是中秋,那麼就來做一套提高組比賽van1van吧。幹嘛不放我們走 再次被留到8 30 懷揣著夢想來做題。t1什麼鬼!手玩了一會玩不出來。算了先不管他。t2一眼題,不過似乎精度有點方。似乎只有我乙個人用了實數二分耶。玄學加成 t3直接切,放這種裸題有意思嗎?似乎是noip難度也無力吐槽了 推t1推...

NOIP模擬賽11 5總結

比賽過程中出現斷電尷尬 真的逗。逗的真 看完第一題,因數這種東西都是根號個,再看範圍才200個數。所以就是隨便做。看完第二題,本來覺得用什麼map儲存狀態,因為狀態不會很多,所以可以做。仔細想想發現狀態可能很多,於是仔細觀察題目條件。價值很小,就理所應當想到第二維設成價值的dp。不難。第三題看完,就...

NOIP模擬賽考試總結

noip模擬賽考試總結 這兩天我們進行了以小奇為主題的noip模擬賽 考試總結 第一題看出是乙個dp,但是前面的決策對後面有影響,百思不得其解時想到後面決策對前面沒有影響,所以從後面開始dp,每步取max。第二題看了半天都不會,交了乙個暴力演算法,得了0分,因為我把字首和取模了,比如 1 2 3 4...