1. 程式人生 > 實用技巧 >「考試反思」2020-10-31 警示

「考試反思」2020-10-31 警示

方程的解

考場上手推了 \(exgcd\)

然後掛成了 \(20\)

確實有些問題沒有想清楚:

\(1.\) \(ax+0y=c\) 得在 \(c\% a=0\) 時有無數個解,反之沒有

\(2.\) 計算正整數解的時候得調一個到 \(>0\) 然後維護另一個,這裡的細節得想明白寫對了

exgcd(a,b,x,y); x*=c; y*=c;
while(x<0) x+=b,y-=a;
//x>0
int res=0; 
y+=(x/b)*a; x%=b;
if(y<=0) return puts("0"),void();
res=(x>0&&y>0)+y/a-(!(y%a));

Matrix

定義 \(f_{i,j}\) 為左端點結束在 \(i\) 以及之前的區間有 \(j\) 個區間在右邊放了數字

\(dp\) 搬運工的幾個題目的狀態定義是有點像的

轉移需要預處理兩個陣列,\(l_i,r_i\) 分別表示有多少行的左/右區間在 \(i\) 結束

\(f_{i,j}\times= A_{i-j-l[i-1]}^{l[i]-l[i-1]}\) 判斷狀態是不是可行,順便乘上排列數

\(f_{i+1,j}+=f_{i,j},f_{i+1,j+1}+=f_{i,j}\times (r_{i+1}-j)\)

分別在左邊和右邊放數字即可

思路的變換著實很妙,轉到這個上去計數的思路積累了

光/CF274E

考試的時候寫了 \(2h\) 但是寫得有點不太得法,有些地方確實是寫複雜了

以後立下來一個 \(flag\):如果 \(1h\) 內沒有寫完的題目,直接換掉去寫暴力,防止其阻礙全域性

不過對於 \(3h\) 場一小時也很珍貴了

挺難取捨的其實

上次考試調模擬題做了 \(3h\) ,這次又來了一個

其實也不知道自己為啥要剛這題,可能是為了逃避 資料結構 和 \(dp\) 吧,以後不能這樣了

以後衝破頭也要去幹dp出來,要不然考試的時間拿來調程式碼和自閉就太無意義了


這題題解:當時自己想的是直接維護所有的對角線,然後二分最早的位置

就寫就行了,誠然,寫不出來