第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秒的運算時間。

第122章 騙過多少女孩子?第86章 蘇婉瑩的預測第68章 舉報了、舉報了第259章 江寒的秘奧義第98章 全能UP主第99章 老江很忙第10章 給老江打個電話第224章 上癮了怎麼辦?第180章 想謙虛都沒地方謙虛第46章 月考開始第330章 小孔成像和PNP問題第72章 玩不起第23章 震驚商城,開啓!第28章 老宋的算盤第279章 一舉成名天下知第377章 打造自己的科技品牌第396章 線性CCD掃描相機第196章 背黑鍋我來第247章 對拍、Day1第三題第111章 虛擬空間,開啓!第125章 我有一個同桌第331章 揹着媽媽偷吃第110章 敲竹槓第163章 萬能逼近定理第115章 無線電發射器第279章 一舉成名天下知第259章 江寒的秘奧義第69章 論如何追女孩紙第336章 女孩的心思你別猜第242章 搞出問題怎麼辦?第344章 好險間接那個啥第8章 裝〇也要講基本法第3章 一個大膽的想法第147章 有點深奧啊第68章 舉報了、舉報了第77章 多少次回眸第226章 還能剩下幾個?第219章 點到爲止第53章 大功告成第258章 學霸的畫風,都是這麼清奇的嗎?第398章 商用級手寫識別算法第282章 又一顆壞蘋果?第329章 拋棄框架,從零開始造輪子第263章 一切都在算計中第77章 多少次回眸第112章 圖紙和垃圾桶今天只有一章了第396章 線性CCD掃描相機第5章 三個系統準備就緒第177章 口是心非的非第17章 男朋友挺好第430章 超算落成,九段助陣第77章 多少次回眸第336章 女爲悅己者容第235章 有所不爲、有所必爲第345章 意外連連第58章 作報告?第132章 做個小遊戲第100章 談判第404章 神經系統疾病的終極治療手段第66章 審覈過程第361章 有點像“年輕”時的自己第160章 只能看到文章本身第107章 附加條件第214章 小夥子,你很有勇氣啊!第339章 翻雲覆雨,點石成金第327章 雨雪交加、霏雯相對第21章 《琵琶行》公開第154章 腦力提升的副作用第372章 卷積神經網絡第146章 給你個眼神自己領會第176章 現學現賣第369章 點八個,贈十個……第177章 口是心非的非第253章 不幸猜中了第155章 到底什麼關係?第307章 沒有證據可不行第422章 更有效率的刷分第119章 高中課程裡有這些?第148章 到底什麼意思?第281章 當場搶人第99章 老江很忙第415章 滿分入選國家隊第47章 都選C第163章 萬能逼近定理第132章 做個小遊戲第237章 大魚和小魚第273章 假如氪金就能變強第312章 阱中有坑,坑裡有釘第284章 江寒的操作第255章 調整超參數,以及防止過擬合第17章 男朋友挺好第349章 說錯了什麼?第43章 寫字機器人第113章 刷分的可能性第291章 驚動了各路神仙第143章 別人笑我太瘋癲第105章 寶藏男孩第18章 就是普通同學第293章 精誠所致,金石爲開?
第122章 騙過多少女孩子?第86章 蘇婉瑩的預測第68章 舉報了、舉報了第259章 江寒的秘奧義第98章 全能UP主第99章 老江很忙第10章 給老江打個電話第224章 上癮了怎麼辦?第180章 想謙虛都沒地方謙虛第46章 月考開始第330章 小孔成像和PNP問題第72章 玩不起第23章 震驚商城,開啓!第28章 老宋的算盤第279章 一舉成名天下知第377章 打造自己的科技品牌第396章 線性CCD掃描相機第196章 背黑鍋我來第247章 對拍、Day1第三題第111章 虛擬空間,開啓!第125章 我有一個同桌第331章 揹着媽媽偷吃第110章 敲竹槓第163章 萬能逼近定理第115章 無線電發射器第279章 一舉成名天下知第259章 江寒的秘奧義第69章 論如何追女孩紙第336章 女孩的心思你別猜第242章 搞出問題怎麼辦?第344章 好險間接那個啥第8章 裝〇也要講基本法第3章 一個大膽的想法第147章 有點深奧啊第68章 舉報了、舉報了第77章 多少次回眸第226章 還能剩下幾個?第219章 點到爲止第53章 大功告成第258章 學霸的畫風,都是這麼清奇的嗎?第398章 商用級手寫識別算法第282章 又一顆壞蘋果?第329章 拋棄框架,從零開始造輪子第263章 一切都在算計中第77章 多少次回眸第112章 圖紙和垃圾桶今天只有一章了第396章 線性CCD掃描相機第5章 三個系統準備就緒第177章 口是心非的非第17章 男朋友挺好第430章 超算落成,九段助陣第77章 多少次回眸第336章 女爲悅己者容第235章 有所不爲、有所必爲第345章 意外連連第58章 作報告?第132章 做個小遊戲第100章 談判第404章 神經系統疾病的終極治療手段第66章 審覈過程第361章 有點像“年輕”時的自己第160章 只能看到文章本身第107章 附加條件第214章 小夥子,你很有勇氣啊!第339章 翻雲覆雨,點石成金第327章 雨雪交加、霏雯相對第21章 《琵琶行》公開第154章 腦力提升的副作用第372章 卷積神經網絡第146章 給你個眼神自己領會第176章 現學現賣第369章 點八個,贈十個……第177章 口是心非的非第253章 不幸猜中了第155章 到底什麼關係?第307章 沒有證據可不行第422章 更有效率的刷分第119章 高中課程裡有這些?第148章 到底什麼意思?第281章 當場搶人第99章 老江很忙第415章 滿分入選國家隊第47章 都選C第163章 萬能逼近定理第132章 做個小遊戲第237章 大魚和小魚第273章 假如氪金就能變強第312章 阱中有坑,坑裡有釘第284章 江寒的操作第255章 調整超參數,以及防止過擬合第17章 男朋友挺好第349章 說錯了什麼?第43章 寫字機器人第113章 刷分的可能性第291章 驚動了各路神仙第143章 別人笑我太瘋癲第105章 寶藏男孩第18章 就是普通同學第293章 精誠所致,金石爲開?