本次練習由iBeyond成員鄙人、白翔、張君帥小朋友共同完成。
本次練習只是杭州邀請賽的熱身練習,訓練下默契。
本次練習只有兩個螢幕,也就是說只有兩份題目可以看,這導致白翔和我一起看題,所以我們在最早的時候看了A題(Taxi
Fare),就敲了A題,而不是大水題K題(Yet Another Story of Rock-paper-scissors)和D題(Draw
Something Cheat)。在交了A題兩次Wa之後,才開始寫K題,K題君帥一看就說是道紙老虎題,唬人的,直接輸出妹子名字1Y。K題A了之後回過頭來改A題代碼,A題思路改變如下:一開始算兩個人的開銷,再相減,由於精度問題交了一次後改成簡單的,直接用差值求即可,但仍然wa,擔心是精度問題,乘以1000,就不會有小數點了,然後分開判斷交就AC了。
交完A題,君帥和我講了下他看的J題(Modular Inverse)的大意,我馬上意識到可以暴力,用同餘定理可以證明在x<=m之內即可找到答案。但沒寫特判,一直Wa到我們回實驗室,其實只要加個if
(a == 1 || m == 1) xxoo就可以過了,但是我們一直認為(ax)%m == 1 和ax % m == 1 % m是等價的,m=1的時候明顯就不一樣。
把D題題目看了兩遍,理解題意後把鍵盤搶來,直接開個數組儲存每個字串中出現的字母個數,然後求各個串中每個字母出現的最少次數即可,提交1A.。
交過A題之後,白翔開始和君帥說H題(Lazier Salesgirl),君帥看完題目,理了下思路,馬上說水題,貪心即可,深諳裝逼之道啊。但後來改成直接遞推,用每段間隔時間往後推,也的確被他1A了。
到目前為止AC了4題大水題,看過的可出題還有J題和C題(Count
the Trees),C題據說是資料結構題,可是我沒什麼思路,於是君帥開始敲。就看他眉飛色舞敲代碼,提交返回Wa.後來的時間就比較悲劇,C交不過繼續寫J題也未AC。大概是3小時半的時候白翔和我講了F題(Find
the Marble),題目大意是給出一排罐子,最初某個罐子裡放有一個石子。現在可以將某個罐子和另一個罐子交換,如果某個罐子裡有石子,就會改變狀態。最後從m個交換操作中選擇k個,必須按順序,問最終石子最可能在哪個罐子。由於必須按照順序,這就保證了本題沒有後效性。做這題的時候去了趟廁所,臨走之前說去一趟回來就有思路,回來以後果然有思路,想了個狀態轉移方程,想到就果斷敲,敲完就華麗麗地Wa了。最初的狀態轉移方程是轉移的 dp[i][j][p] +=
dp[i-1][x][arr[x].x](x < j && arr[x].y == p)。但是最後剩下來的時間不多,實驗室又要關門,所以這題在實驗室的時候沒有AC.回到宿舍改了下狀態轉移方程 dp[i+1][x][arr[x].x] += dp[i][j][p](x > j && arr[x].y == p)
|| dp[i+1][x][arr[x].y] += dp[i][j][p](x > j && arr[x].x == p),其實只要交換操作的某一方有石子,都會影響結果。
本次練習的結果還不錯,如果實驗室沒那麼早關門,我們應該能把F題A了,如果時間多J題也能AC。這樣的話在現場賽至少是個銀牌,但是在現場賽可能就弱爆了,鬼知道呢。
本次練習暴露出幾個問題:
1、沒在最開始的時候吧最簡單的題目做了,雖然和只有兩份題目可看有一定關係,但是這畢竟影響了結果。
2、數學方方面一直是iBeyond的軟肋,簡單題偶爾覺得複雜不敢放開做,複雜題想簡單了白白浪費了時間影響狀態。
3、一些基礎的資料結構運用得不夠熟悉,比如那題C題,按道理可以敲的,可是卻沒敢敲,還聲稱自己是做資料結構的貨。這個問題只能留給時間替我解決吧,畢竟精力有限,我不可能同時做很多方面,術業有專業,我想把一個方面做精,形成核心競爭力。
本文ZeroClock原創,但可以轉載,因為我們是兄弟。