第247章 對拍、Day1第三題

沒錯,剛纔的猜想是憑直覺和少量筆算搞出來的。

要想驗證自己的猜想,除了數學證明,最實用的方式就是對拍。

所謂對拍程序,通俗的說法,就是數據比較器。

方法很簡單。

將窮舉暴力搜索版本的代碼,編譯成可執行文件a;

將運用了猜想,優化後的代碼編譯成b;

然後編寫一個隨機數據生成器,命名爲rand;

接下來,就可以製作對拍程序了。

代碼的主體是個有限次的循環。

循環體內部,核心部分是幾個 system()函數。

先調用“./rand“生成隨機數據,存入s.in,再分別調用a、b,讀取s.in,輸出a.out 和b.out兩個文本文件。

最後調用“diff a.out b.out“,進行比較。

如果發現兩個文本文件不一致,則說明優化後的程序有問題,於是提示錯誤信息以及出錯原因。

這就是對拍,號稱最強的調試辦法,比GDB之類的調試工具好用多了。

江寒寫完對拍之後,設了一個60000次的循環,花了2分多鐘跑完一遍。

結果沒有輸出任何錯誤信息,這表示自己的猜想是完全成立的。

下一步,就該把優化後的代碼擴展到高精度了。

這一步對很多選手來說,都是個難點,很容易大意之下,寫漏一些條件。

比如位數的最大值處理得不好,或者犯下其他的小失誤,就會導致運算出bug。

倒也不一定完全不能運行,只是碰到特殊數據時,可能會得出不正確的輸出。

運氣好的時候,也能正常得分,運氣差一點,可能就會丟分了。

高精度運算的基本原理,是模擬手工列豎式計算,其中要考慮數位對齊和進位、借位處理。

這種代碼在網上有的是,但運算效率上,那些比較常見的代碼,就有點不敢恭維了。

江寒在刷《NOIP寶典》的時候,自己研究出來了一種高精度算法,可以說是不傳之秘,比網上能找到的示範代碼,要精簡和巧妙很多。

在這道題裡,江寒要做的就是模擬手算高精度乘除法。

如果不打高精度,那麼最多僅能滿足40%的數據要求。

這道題滿分100,能看懂題目,並寫出暴力搜索算法,就能20分。

能發現規律,寫出快速排序,就能得到40分。

對於實力有限,有自知之明的選手,做到這裡就可以收手了。

只有那些對自己足夠自信,且能熟練編寫代碼進行高精度運算的人,纔會繼續改造算法,以衝擊高分。

高精度的乘法好寫,除法就稍微有點難度了。

這裡又有兩種選擇,一個是寫高精除高精,滿足100%的輸入數據要求。

要麼就退而求其次,被除數爲高精度,除數爲單精度,這樣也可以滿足至少60%的輸入數據要求。

寫對高精除以單精,能得60分,寫出高精除以高精,纔有機會得到滿分。

但高精除以高精,是相當複雜的,一旦寫錯、寫漏了條件,說不定反而得不償失,連60分都得不到。

所以,是保證到手60分,還是冒着浪費時間的風險,衝擊一下滿分?

對於其他人來說,這當然是個艱難的抉擇,但對於江寒來說,根本無需糾結。

反正時間也有的是,當然是選擇後者了。

江寒花了大約半個小時,寫出了雙高精除法的版本,並調試通過。

然後設計了幾組極限數值,代入進去運算,結果與筆算結果完全一致。

邊界條件沒問題,這個程序出問題的機率就相當低了。

倒也不是不能用系統作弊。

做出爆搜程序後,可以通過20%的校驗點,系統就提示了一次獲得“學以致用”積分。

運用了猜想,改爲快速排序後,系統再次提示,獲得了“學以致用”積分。

改成高精度後,系統也有獲得更多積分的提示。

這說明,江寒對程序做出的每次改進,都能使其通過更多的校驗點。

但系統的幫助也只能到這裡了,只能據此判斷出,每個步驟中的程序,都是可以得分的,卻無法判斷出是否能得到滿分。

江寒只能依靠自己豐富的編程經驗,儘可能保證程序無BUG。

搞定了前兩道題後,時間已經過去了1個半小時。

剩下的兩個小時,全部交給最難的第三題。

題目是《開車旅行》。

題目概述:將N個城市編號爲1~N,編號小的城市在編號較大的城市之西。

各個城市海拔都不一樣,城市i的海拔爲Hi,城市i與j之間的距離d【i,j】爲兩城市海拔之差的絕對值。

也就是說d【i,j】=-Hi-Hj-。

A、B二人輪流開車,從A開始,每日輪換。

選擇一個城市S爲起點,一直向東,最多行駛X公里,就結束。

A、B駕駛風格不同,B總是沿着前進方向,選擇最近的城市作爲目的地,A總是沿着前進方向,選擇第二近的城市作爲目的地。

PS:如果兩個城市距離相同,則海拔低的視爲較近。

如果其中任何一人,無法按照自己的原則選出目的地,或者到達目的地會使公里總數超過X,就結束旅行。

輸入文件中包含如下內容:城市N的數目,城市1~N的海拔高度,X0,M組Si和Xi。

輸出文件中,要求回答兩個問題。

1、對於給定的X=X0,從哪一個城市出發,A開車行駛的路程與B開車行駛的路程比值最小?

2、對於任意給定的X=Xi和出發城市Si,A、B開車行駛的路程總數是多少?

說實話,這道題的難點,主要在於題目的表述比較複雜。

一般人光看懂題目,就至少需要15分鐘……

江寒也足足花了5分鐘,才搞清楚題目的意思。

但如果讓他評價這道題的難度……

勉強3星吧。

這個題目的簡單之處在於,哪怕用最笨拙的辦法,寫個暴力搜索程序,都能保底70分。

可以說是白給。

但如果想拿滿分,難度直接飆升到天際。

畢竟題目中規定:對於100%的數據,有1≤N≤100,000,1≤M≤10,000;

-1,000,000,000≤Hi≤1,000,000,000;

0≤X0≤1,000,000,000;

1≤Si≤N;

0≤Xi≤1,000,000,000。

其中,數據保證 Hi互不相同。

江寒很想吐槽,海拔的上限是10億,這麼高的地方,肯定不在地球上吧?

而海拔的下限-10億,這已經LOW穿地心了喂!

好吧,又是一個“艱難”的選擇,到底是穩定拿70分,還是冒着巨大的風險,衝擊更高的分數?

這道題的關鍵仍然是數據預處理。

預處理得好,直接難度減半。

關於預處理,有很多可行的辦法,離散化+鏈表、雙向鏈表、平衡樹……

甚至STL的set都可以。

但不能用複雜度爲O(n^2)的算法,那樣很容易在校驗時,時間超限。

畢竟根據規定,每個校驗點只有1秒的運算時間。

第16章 倔強的夏雨菲第311章 系統安全特聘測試員第77章 多少次回眸第37章 烤肉第77章 多少次回眸第10章 給老江打個電話第41章 要是不帥不酷呢?第248章 需要對答案嗎?第174章 良心工作室第133章 過去的自己,以及自己的過去第223章 她不會玩真的吧?第11章 像我這麼專一第382章 電動車和機械臂第420章 強化學習的威力第154章 腦力提升的副作用第326章 “戰神一號”的弱點第196章 背黑鍋我來第206章 整理論文第290章 其實已經有點過時了第393章 男人不能沒有事業第277章 學之力,9段!第381章 以理服人,大江科技第424章 又一個冠軍到手第7章 所謂“取整”,就是……第45章 火了第14章 別帶壞了江寒第341章 決戰楓林火山第352章 有了一個小助手第207章 複賽環境和Arbiter評測系統第51章 任務分析第187章 牀下的小畫冊第295章 全世界沒人教得了第80章 碰碰船和真人CS第235章 有所不爲、有所必爲第343章 差之毫釐,謬以千里第226章 還能剩下幾個?第318章 飛機點餐攻略第115章 無線電發射器第416章 有困難找組織第61章 記憶和遺忘的生物學原理第344章 好險間接那個啥第358章 27個學術點第13章 “感知機”和“M-P模型”第53章 大功告成第302章 聳人聽聞,觸目驚心第327章 雨雪交加、霏雯相對第261章 曉之以理,動之以錢第22章 名偵探婉瑩第268章 最終版本第50章 可能整大發了第281章 當場搶人第380章 買豬頭不要肉第251章 特效藥第137章 聽鬆小院,好地方?第181章 無監督學習和SOM第392章 深度卷積神經網絡第341章 決戰楓林火山第70章 水上公園第327章 雨雪交加、霏雯相對第116章 要節制一點了第32章 借MacBook一用第221章 超級大腦,人傑地靈第7章 所謂“取整”,就是……第297章 Py大法威力無窮第183章 成功的路上沒有僥倖第284章 江寒的操作第69章 論如何追女孩紙第84章 磁陣第45章 火了第391章 一切交給時間第263章 一切都在算計中第275章 整整齊齊、更高更遠第343章 差之毫釐,謬以千里第105章 寶藏男孩第344章 好險間接那個啥第67章 異或問題第176章 現學現賣第99章 老江很忙第177章 口是心非的非第147章 有點深奧啊第168章 本能反應第174章 良心工作室第13章 “感知機”和“M-P模型”第175章 一億一個第122章 騙過多少女孩子?第393章 男人不能沒有事業第142章 哪捨得叫你疊被鋪牀?第252章 生吃海蔘,不蘸醬油第187章 牀下的小畫冊第299章 膽大妄爲,實力恐怖第372章 卷積神經網絡第237章 大魚和小魚第257章 NOIP中最難的題型第67章 異或問題第156章 你高興的太早了第205章 江寒的心性第333章 不怕教壞了乖女兒?第243章 比賽心得和騙分教程第375章 沒有操作系統怎麼辦?第282章 又一顆壞蘋果?
第16章 倔強的夏雨菲第311章 系統安全特聘測試員第77章 多少次回眸第37章 烤肉第77章 多少次回眸第10章 給老江打個電話第41章 要是不帥不酷呢?第248章 需要對答案嗎?第174章 良心工作室第133章 過去的自己,以及自己的過去第223章 她不會玩真的吧?第11章 像我這麼專一第382章 電動車和機械臂第420章 強化學習的威力第154章 腦力提升的副作用第326章 “戰神一號”的弱點第196章 背黑鍋我來第206章 整理論文第290章 其實已經有點過時了第393章 男人不能沒有事業第277章 學之力,9段!第381章 以理服人,大江科技第424章 又一個冠軍到手第7章 所謂“取整”,就是……第45章 火了第14章 別帶壞了江寒第341章 決戰楓林火山第352章 有了一個小助手第207章 複賽環境和Arbiter評測系統第51章 任務分析第187章 牀下的小畫冊第295章 全世界沒人教得了第80章 碰碰船和真人CS第235章 有所不爲、有所必爲第343章 差之毫釐,謬以千里第226章 還能剩下幾個?第318章 飛機點餐攻略第115章 無線電發射器第416章 有困難找組織第61章 記憶和遺忘的生物學原理第344章 好險間接那個啥第358章 27個學術點第13章 “感知機”和“M-P模型”第53章 大功告成第302章 聳人聽聞,觸目驚心第327章 雨雪交加、霏雯相對第261章 曉之以理,動之以錢第22章 名偵探婉瑩第268章 最終版本第50章 可能整大發了第281章 當場搶人第380章 買豬頭不要肉第251章 特效藥第137章 聽鬆小院,好地方?第181章 無監督學習和SOM第392章 深度卷積神經網絡第341章 決戰楓林火山第70章 水上公園第327章 雨雪交加、霏雯相對第116章 要節制一點了第32章 借MacBook一用第221章 超級大腦,人傑地靈第7章 所謂“取整”,就是……第297章 Py大法威力無窮第183章 成功的路上沒有僥倖第284章 江寒的操作第69章 論如何追女孩紙第84章 磁陣第45章 火了第391章 一切交給時間第263章 一切都在算計中第275章 整整齊齊、更高更遠第343章 差之毫釐,謬以千里第105章 寶藏男孩第344章 好險間接那個啥第67章 異或問題第176章 現學現賣第99章 老江很忙第177章 口是心非的非第147章 有點深奧啊第168章 本能反應第174章 良心工作室第13章 “感知機”和“M-P模型”第175章 一億一個第122章 騙過多少女孩子?第393章 男人不能沒有事業第142章 哪捨得叫你疊被鋪牀?第252章 生吃海蔘,不蘸醬油第187章 牀下的小畫冊第299章 膽大妄爲,實力恐怖第372章 卷積神經網絡第237章 大魚和小魚第257章 NOIP中最難的題型第67章 異或問題第156章 你高興的太早了第205章 江寒的心性第333章 不怕教壞了乖女兒?第243章 比賽心得和騙分教程第375章 沒有操作系統怎麼辦?第282章 又一顆壞蘋果?