2019ICPC徐州打鐵心得

 

現在是夜間十點三十分,列車緩緩駛離徐州。此時,車內鼓譟的焦糊氣味,或是窗外領受放逐的夜色,無一不暗示並試圖揭開一個黑灰色的謎底——

俺們打鐵了。

冇錯,俺打鐵了。2019ICPC徐州,我ACM划水生涯中的第一場區域賽,就這樣打鐵了。真的難受。反正火車上也睡不好,乾脆就流水賬式記錄一下打鐵心得吧(捂臉)

徐州站的比賽時間是在11/2-3,很不巧,在湖大校歷上,這兩個日期屬於第八、九周,那些期中考試密佈的時間;更不巧的是,11/1正好安排了操作系統的期中考。本鐵表示真的南,平時各種作業、各種實驗已經把本鐵榨乾了,平時就冇時間敲代碼寫題了,這下還得同時兼顧兩邊,本鐵可做不到。本鐵也確實沒有做到(捂臉),所以本鐵基本是隨意糊過了操作系統複習,然後隨意刷了幾道網絡流(WA了),就考完了試並搭乘上了1號的從長沙開往徐州的高鐵。

高鐵上,前排三連座(合肥轉向後變成了後排233)是湘潭大學的一支隊伍。說實話,覺得湘大有點強,上次CCSP湘大拿了兩塊金牌兩題一血而我湖金牌數爆零的慘狀我還歷歷在目,肅然起敬。同一列車還有幾支同是去徐州站的其他學校隊伍,沒有一一招呼。

接下來就是漫長的乘車了,一直到晚上八點多才抵達酒店。原本的想法是1號晚到酒店再刷幾道題(因爲三個人都忙於應付繁重的課程,真的蠻久沒敲代碼了…這也是打鐵的原因之一),但是一天的旅途的勞累把代碼置換爲了癱倒和炸雞,然後開始幻想打到不同顏色的牌子(黑色除外)。就這樣,打鐵故事的序章就這樣結束了。

第二天,本鐵睡到了十點半纔起來(雖然九點就醒了),然後坐公交到了礦大南湖校區準備簽到。到了體育館簽到,發生了令人難忘的卑微事件:礦大並沒有爲我們隊準備比賽物資。看着同一時間到達的zju隊伍,乾淨利落地領取到物資,心裏不由地恰起了檸檬。但是沒有物資是不行的,比賽服、胸牌、餐券等等。志願者們在詢問了我們三人的上衣尺碼後,爲我們臨時配齊了一套物資。但是!但是!俺們這胸牌咋跟別人的不一樣呢?!人家的胸牌上印刷着姓名與學校,俺們的胸牌咋是一塊大白板???嗯???志願者叫我們自行寫上姓名學校,我們便開始幻想寫上諸如jls、dls之類的祈願圖騰,但最終決定保持它的白板模樣,做三個無名鐵憨憨。

飯點,餐券指引我們到鬆苑餐廳三樓恰飯。菜品總共好像是有三葷兩素,可以任選兩葷一素,最好吃的居然是大白菜。恰完飯,逛逛礦大校園,然後按照慣例,必感慨其他學校面積之寬廣、建築之高大、湖水之必要、草地之奢華…兜兜轉轉之後,回到體育館,休息了一會便開始進場,準備進行開幕式與熱身賽了。進場後,我們迅速找到屬於我們的機位,發現右方是高鐵上遇到的湘大的隊伍,而右後方則是敵我實力懸殊的thu,瑟瑟發抖。

隨着無聊的開幕式結束,熱身賽正式開始。評測系統是PC2,是第一次見到吧,並不熟悉,所以剛開始研究了一陣子纔開始交題。B題是水題,所以1A了。A題畫圖觀察了一下,很快就發現了大權值應該放在長鏈上,寫了一個長鏈剖分,又1A了。C題題意還沒看懂,就聽見旁邊的thu好像做出來了,真實卑微…儘管C題後來我們看懂了,還是不知道要怎麼做1551。最後熱身賽結束我們在銀區,感覺還行(菜雞自我感覺良好),就高興地回酒店了。

第三天,也就是正式比賽的日子。早上乘坐七點半的酒店大巴去往礦大,坐在本鐵旁邊的不知名學校的在打邦邦(打得比本鐵菜)。真的佩服在大巴車上這麼抖還打音遊,由於沒有社交慾望,所以並冇交流。抵達礦大後,一直到八點半纔開放入場,我們找到我們的位置,掏出裝飾性道具“算法模板”以及“英漢詞典”,作爲桌面除氣球外最精美的擺件。

九點鐘,比賽正式開始。本鐵用量子波動速讀通讀了題目,發現題面都不長,心生所有題都是簽到題的鬼才想法。本鐵選擇先看J題,因爲它看起來是個圖論題。J感覺用歐拉路跑一下什麼什麼的,但是由於沒有特別清晰的思路以及試圖跟榜的菜雞心理,沒有深入思考。

十多分鐘後,C題有人過了,我們立即跟榜!C的題面非常不一般!“明明是素數非要說成是<3 number!你搞不了我的”於是,我們就被搞了。素數密度好像是有式子的,但是我忘了,但是通過簡單推理,是可以發現區間長度超過一定數值,素數的個數必定小於區間長度的三分之一,也就是輸出Yes,而對於小區間,則採取暴力判斷的方式,複雜度是夠的。俺們的主碼jh光速敲完,然後光速提交,然後光速WA了!多麼完美的算法,居然WA了!這是無法被接受的,於是我們開始debug。首先懷疑的是暴力求解的區間範圍是不是太小了,因爲只取了1e2,但是用sqrt(n)複雜度的判斷素數算法太慢了,範圍不能再擴大。爲了解決素數判斷太慢的問題,jh果斷選擇了敲一個米勒拉賓!成功將暴力判斷的範圍擴大到1e4!提交,又WA了!怎麼可能???這裏好像只寫了幾句話,實際上賽場上時間已經過去一個小時,全場已經一百多支隊伍完成了C題的簽到,到處都是紅色氣球,而我們還是0題+4罰時!開始慌了,究竟爲什麼,感覺所有人都會的題,爲什麼我們還沒簽出來。接下來就是一直試圖擴大範圍以及對拍驗證猜想的正確性,發現都非常完美,但是就是過不了!(此處:本地過了就是過了,評測機返回錯誤就是評測機的問題.jpg)然後,本鐵開始沉思,比如1是不是素數(對不起一直在想素數想着想着忘了),看了眼隊友寫的代碼“if(x==1) return 0;”,哦,1不是素數啊。然後本鐵開始檢查下面的代碼,沒有發現問題。

時間過去了一個半個小時,我們居然還是0題,而場上大部分隊友都已經簽了兩題了!我們只好在C沒有過的情況下試圖開新題。本鐵在此前還看了一道F,發現可以打表過,但是由於不想搶鍵盤加上想把C先過了,就沒有提直到現在。所以我們寫了一個打表程序,讓它後臺運行,然後接着想C。終於,隊友wk頓悟了一切的奧祕,那最原始的也是最殘忍的——“1不是素數但是是一個<3 number”。。。原來是我們把<3 number直接等價成素數了,所以判斷1的時候直接返回0了,就一直WA了…把判斷1的返回值改成1後秒過,真的哭了,此時時間已過了兩個小時,我們終於簽到了。。。

然後,開始接着看F。“F打表怎麼這麼慢??”1e10的表理論上不用多久就能打完了,但是我們的輸出文件的內容居然紋絲不動!心生疑惑的我們試圖在終端上輸入文字判斷程序是否運行完成,結果發現程序居然還沒開始跑!原來是運行錯了代碼!我們以爲它跑了半個小時,結果一秒鐘都沒跑!儘管這個事實非常令人震驚,但好歹剛剛終於簽到了穩住了心態,所以迅速爲代碼加了些優化,重新跑了一遍。大概跑了二十分鐘,成功把表打好,交上去A了。至此,時間已過兩個半小時,我們終於完成了大家一小時時就完成的兩題簽到。

接下來就是看A題。A題我們都沒有思路,就是一頓瞎打。本鐵搬磚模擬了一下相鄰數異或,發現了一些後來發現有用規律,但是本鐵太菜了,不懂怎麼用,就想着新開一題M,還一直想不太明白題意…A題隊友在做,但是提交了幾次都是WA,以至於後來心態爆炸,提交越來越隨意了,畢竟這時候很多隊伍已經三題了,而我們才兩題,我們想的已經是開始拼題數了,這個理應避免。

我們與A膠着,一直到封榜。此時,我們還是2題,200+名,毫無疑問的鐵區。封榜後,對A大概進行了6次嘗試,始終是WA,直到第7次,意外地返回一個YES,而這時,時間已過去287分鐘,也就是說,只剩下13分鐘了。。。。。。。最後的13分鐘想敲M題,但感覺時間來不及,在最後幾分鐘時放棄了。

最後比賽結束,我們開始瘋狂計算能否不打鐵,最後的結果令人悲傷:我們有百分之九十的概率打鐵(瞎算)。最後結果的確如此,我們罰時爆炸,然後就這樣打鐵了。

由於是第一次參加區域賽,是有很多問題的:心態,細心程度,等等。我們覺得主要是因爲C題簽到題一直過不了導致心態不可避免地變差,影響了後來題目的節奏,同時又浪費了太多時間在上面,導致其他題目時間不夠。當然,還有一個致命問題,就是太菜了。

打鐵是必然經歷的過程(開始自我安慰),那麼這就是我第一次打鐵的真實經歷了…

發佈了115 篇原創文章 · 獲贊 157 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章