第246章 Vigenère密碼和國王遊戲

江寒按了一下電腦電源按鈕,很快顯示器上出現了NOI Linux的啓動界面。

這就必須“贊”一下了,往年都是用虛擬機進入Linux的,今年改成原生系統了。

這樣一來,系統的啓動和運行速度,起碼要提高一倍以上。

實際上,有些省份目前還是Windows和虛擬機Linux並行,選手自行選擇趁手的操作系統。

合江省這次竟然走在了全國前列,率先淘汰了大衆熟悉的Windows……

足足等了三十多秒,終於進入了Linux桌面。

江寒先把桌面分辨率等環境參數,調整成了最順手的設置。

然後按下【Alt+Ctrl+T】,調出終端,用“ls”命令查看了一下。

賽組委果然沒有預先建立比賽文件夾,這樣就只能自己動手了。

江寒按照監考教師下發的參賽說明,使用“mkdir”命令建立了一個文件夾,命名爲【Jianghan】。

接下來,他又在終端中輸入【vim test.cpp】,啓動了代碼編輯器vim的IDE界面,然後按“I”鍵進入插入模式。

這樣就可以鍵入代碼了。

這次比賽仍然可以在c、c++、pascal三種程序設計語言中任選一款。

三種語言各有特點,c語言執行效率最高,pascal語法簡單,但稍嫌刻板,好處是不容易犯低級錯誤,c++則更加適合複雜程序的設計。

江寒毫不猶豫地選擇了最爲熟悉的c++。

首先完成一個測試代碼。

功能很簡單,就是在標準的“hello world”基礎上,增加了一個從1加到100的循環程序,然後將結果輸出到屏幕上。

江寒編輯完代碼,稍微檢查了一遍,排除了可能存在的語法錯誤,然後按“ESC”鍵,退出插入模式,再輸入“WQ”存盤退出。

接下來,回到終端中,輸入命令行指令:【g++ test.cpp -o test】,回車。

這樣,g++編譯器就開始工作,將test.cpp編譯成了可執行文件test。

編譯過程中,如果有錯誤,就會提示出來。

但江寒這個測試程序十分簡單,並沒有犯任何小錯誤,一次就通過了編譯。

接下來,就可以輸入【./test】,來執行生成的可執行文件了。

稍微觀察了一下,確認程序可以正常運行。

這樣系統的檢測和調整就初步完成。

接下來,進行一些進階的設置。

江寒用【vim ~/. vimrc】命令,再次打開vim界面,並加載了配置文件vimrc。

然後修改了一下其中的幾個參數,將vim編輯器的操作模式,調整成了最順手的狀態。

接下來,在自己的比賽文件夾中,創建兩個文本文件:test.in 和test.out。

再修改測試代碼,爲其增加文件輸入輸出功能,並添加對頭文件的引用,使其能操作test.in 和test.out。

再次調試正確後,就得到了一份c++模板代碼。

一會兒比賽正式開始,只需要在模板的基礎上,進行一些修改和填補就可以了。

這些都搞定之後,還剩下大約15分鐘時間,比賽才能正式開始。

江寒在vim中隨便輸入了幾個小程序段,快速排序、堆排序、二分查找……進行賽前熱手,以提升手感。

8點20分,監考人員通知大家登陸ftp服務器,用公用賬號和密碼下載試題壓縮包。

江寒只用了30秒,就把試題壓縮包下載到了自己的桌面上,並解壓到了一個文件夾中。

隨後依次點開3道試題的說明文檔,認真查看了起來。

只用了10分鐘,他就將3道題都看完一遍,並理清了解題思路。

然後按照題目難度,排了個序。

巧的是,三道題的編號和難度係數一一對應。

當然這是對於他來說,換個人看,很可能覺得第2題纔是最難的……

江寒在【Jianghan】文件夾裡,創建了三個子文件夾,按照要求,分別命名爲【vigenere】、【game】和【drive】,一會兒爲各個題目編寫的代碼,就分別存放於對應的文件夾中。

江寒先看第一題:Vigenère密碼。

這是一個密碼學問題,加密規則很簡單。

密鑰k是一個字符串,K=K1K2K3……Kn,當明文M=M1M2M3……Mn時,加密後的密文爲C=C1C2C3……Cn,Ci=Mi⊕Ki。

⊕是一個規則表,26行,26列,每一行代表一種字母替換方式,第一行從A到Z順序排列,第i+1行是第i行循環左移1個字符得到。

⊕運算不區分大小寫,加密結果套用明文的大小寫格式。

當M的長度大於K的長度時,重複使用K。

問題:給出密鑰和密文,求原本的明文。

如果讓江寒給這道題的難度評級,大約只肯給出1星。

這麼簡單的題目,約等於白給。

解題思路十分明確,找出加密規則⊕的數學描述,然後使用⊕的逆運算,代入密鑰K和密文C,求出明文M。

如果實在不想麻煩,也可以將規則表建立成一個字符數組,然後反向查表。

可以說,只要認真訓練過的選手,這道題沒理由會丟分。

江寒迅速在草稿紙上,將流程圖畫了出來,然後編寫C++代碼。

5分鐘搞定代碼,然後在test.in中編制了10組測試數據,一一代入進行模擬計算。

輸出的結果與紙筆計算十分吻合。

此題結束。

由於linux系統區分大小寫,所以江寒在解題的過程中,除了題目中有規定的輸出文本等,程序中使用的所有變量等等,一律使用小寫字母。

接下來是第二題:國王遊戲

N個大臣排成一隊,國王站在隊伍最前方,每個人左右手上,分別寫有一個數字。

國王按照規則,賜予每個大臣一定數量的金幣。

每個大臣所能得到的金幣數,等於排在該大臣之前所有人左手數字之乘積,除以其右手的數字,結果向下取整。

問題是,如何調整大臣的順序,才能讓獲得的金幣最多的那個人,得到的金幣儘可能的少。

注意,國王始終站在隊伍最前方。

然後在輸入數據說明中,有如下提示。

對於 20%的數據,有 1≤ n≤ 10,0 < a、b < 8;

對於 40%的數據,有 1≤ n≤20,0 < a、b < 8;

對於 60%的數據,有 1≤ n≤100;且答案不超過 10^9;

對於 100%的數據,有 1 ≤ n ≤1,000,0 < a、b < 10000。

這道題的難度比第一題稍有提高,但也不算特別費勁。

此題的坑點在於,輸入的數據有可能很大,使用通常的編程方式,只能通過前40%的數據校驗,想得高分,就必須使用高精度編程。

解題思路就是窮舉法。

針對給出的大臣數N,以及給出的N+1組左右手數字a、b,計算每種可能的站位情況所對應的金幣最大值m,再求出集合M={m1,m2,m3,……mk}中的最小值。

由於N個大臣共有N!種站位,所以一旦N足夠大,計算量將是非常恐怖的。

這道題一共10個檢查點,每個檢查點10分。

比賽對於程序運行時間的限制,是每個檢查點不超過1秒。

對於運行空間的限制,是每個程序使用的內存,不得超過128兆。

無論在哪個檢查點超時或者輸出錯誤,都會扣掉該點的分值。

計算機打分的時候,一般會輸入強弱不同的10組測試數據。

遇上小點的數字,比如本題中前20%的數據,只要程序沒有邏輯錯誤,基本都能通過測試,拿到分數。

但當N稍微大一點的時候,使用暴力搜索算法,很可能會超過1s的時限。

所以,一定要找出規律,對輸入的N組a、b進行預處理。

江寒在紙面上推演了一下,很快得到了一個猜想:當大臣們按a×b的積升序排序時,得到的序列就是最優的方案。

那麼原本的暴力搜索程序,就可以改造一下了。

第一步,排序,求出最優方案時的隊列,第二步,計算該情況下的M值。

毫無疑問,這個算法的效率遠比暴力搜索更高,其運行時間取決於使用的排序算法的時間複雜度。

江寒先編制了一個最樸素的暴力搜索算法,測試了一下,驗證程序沒有邏輯錯誤後,另存了一份。

然後又按照改進後的思路,修改了一下代碼,用快速排序整理隊列,然後計算M值。

接下來就是比較好玩的東西了。

對拍。

第153章 眼氣誰呢這是?第325章 說好的理想男神呢?第153章 眼氣誰呢這是?第173章 磨刀不誤砍柴工第412章 小女盆友,青梅竹馬?第347章 中計了第341章 決戰楓林火山第357章 再給你一次機會第230章 萬物皆可“壞蘋果”第408章 初入燕園第26章 週一凡的震驚第105章 寶藏男孩第403章 家產億萬,平平無奇第206章 整理論文第248章 需要對答案嗎?第173章 磨刀不誤砍柴工第14章 別帶壞了江寒第261章 曉之以理,動之以錢第138章 避蚊胺,登山第215章 儀表堂堂,器宇軒昂第200章 真的只是惡作劇嗎?第408章 初入燕園第114章 收音機,以及1:10?第202章 輸得明明白白第140章 虛驚第215章 儀表堂堂,器宇軒昂第97章 媽媽問我爲何跪着看手機?第134章 喜歡大一點的第388章 組隊刷分,在線賣軟第254章 數據解析和FCN的拓撲結構第21章 《琵琶行》公開第246章 Vigenère密碼和國王遊戲第225章 papa別鬧!第40章 好朋友來了第295章 全世界沒人教得了第71章 憑什麼是江寒?第373章 肉體永生,還是機械飛昇?第210章 爲了節目效果第397章 作曲大師,自帶乾糧第351章 送她點什麼?第381章 以理服人,大江科技第307章 沒有證據可不行第174章 良心工作室第86章 蘇婉瑩的預測第360章 造了什麼孽?第213章 橫生枝節第117章 沒聽說過?第198章 唯實話與馬屁不穿第299章 膽大妄爲,實力恐怖第330章 小孔成像和PNP問題第1章 一夜回到十年前第158章 查崗?第331章 揹着媽媽偷吃第23章 震驚商城,開啓!第335章 不走尋常路第212章 他和夏總到底什麼關係?第335章 長痛不如短痛第242章 搞出問題怎麼辦?第130章 大佬和小蘿莉第268章 最終版本第141章 金裝四大才子第19章 一切爲了押韻第349章 說錯了什麼?第211章 就當幫他們改進一下服務質量了第203章 誰支持、誰反對?第191章 好像只能擠一擠了第71章 憑什麼是江寒?第42章 P站阿婆主第377章 打造自己的科技品牌第93章 《泡沫》第238章 競爭對手?第10章 給老江打個電話第9章 實名震驚第180章 想謙虛都沒地方謙虛第152章 你的承諾呢?第322章 愚者注視着你第336章 女爲悅己者容第160章 只能看到文章本身第343章 差之毫釐,謬以千里第345章 意外連連第132章 做個小遊戲第345章 意外連連第301章 人間喜劇,喜聞樂見第174章 良心工作室第56章 花錢容易賺錢難第309章 天賦異稟,出生太晚第61章 記憶和遺忘的生物學原理第28章 老宋的算盤第64章 渣男第406章 不可思議的學習效率第6章 三個系統倒有四種資源?第405章 身手很好,飯來張口第256章 擴展歐幾里得算法,以及增強線段樹第114章 收音機,以及1:10?第160章 只能看到文章本身第61章 記憶和遺忘的生物學原理第15章 夏雨菲的羨慕第285章 “彈性碰撞”第316章 順藤摸瓜第359章 大佬,怪蜀黍?
第153章 眼氣誰呢這是?第325章 說好的理想男神呢?第153章 眼氣誰呢這是?第173章 磨刀不誤砍柴工第412章 小女盆友,青梅竹馬?第347章 中計了第341章 決戰楓林火山第357章 再給你一次機會第230章 萬物皆可“壞蘋果”第408章 初入燕園第26章 週一凡的震驚第105章 寶藏男孩第403章 家產億萬,平平無奇第206章 整理論文第248章 需要對答案嗎?第173章 磨刀不誤砍柴工第14章 別帶壞了江寒第261章 曉之以理,動之以錢第138章 避蚊胺,登山第215章 儀表堂堂,器宇軒昂第200章 真的只是惡作劇嗎?第408章 初入燕園第114章 收音機,以及1:10?第202章 輸得明明白白第140章 虛驚第215章 儀表堂堂,器宇軒昂第97章 媽媽問我爲何跪着看手機?第134章 喜歡大一點的第388章 組隊刷分,在線賣軟第254章 數據解析和FCN的拓撲結構第21章 《琵琶行》公開第246章 Vigenère密碼和國王遊戲第225章 papa別鬧!第40章 好朋友來了第295章 全世界沒人教得了第71章 憑什麼是江寒?第373章 肉體永生,還是機械飛昇?第210章 爲了節目效果第397章 作曲大師,自帶乾糧第351章 送她點什麼?第381章 以理服人,大江科技第307章 沒有證據可不行第174章 良心工作室第86章 蘇婉瑩的預測第360章 造了什麼孽?第213章 橫生枝節第117章 沒聽說過?第198章 唯實話與馬屁不穿第299章 膽大妄爲,實力恐怖第330章 小孔成像和PNP問題第1章 一夜回到十年前第158章 查崗?第331章 揹着媽媽偷吃第23章 震驚商城,開啓!第335章 不走尋常路第212章 他和夏總到底什麼關係?第335章 長痛不如短痛第242章 搞出問題怎麼辦?第130章 大佬和小蘿莉第268章 最終版本第141章 金裝四大才子第19章 一切爲了押韻第349章 說錯了什麼?第211章 就當幫他們改進一下服務質量了第203章 誰支持、誰反對?第191章 好像只能擠一擠了第71章 憑什麼是江寒?第42章 P站阿婆主第377章 打造自己的科技品牌第93章 《泡沫》第238章 競爭對手?第10章 給老江打個電話第9章 實名震驚第180章 想謙虛都沒地方謙虛第152章 你的承諾呢?第322章 愚者注視着你第336章 女爲悅己者容第160章 只能看到文章本身第343章 差之毫釐,謬以千里第345章 意外連連第132章 做個小遊戲第345章 意外連連第301章 人間喜劇,喜聞樂見第174章 良心工作室第56章 花錢容易賺錢難第309章 天賦異稟,出生太晚第61章 記憶和遺忘的生物學原理第28章 老宋的算盤第64章 渣男第406章 不可思議的學習效率第6章 三個系統倒有四種資源?第405章 身手很好,飯來張口第256章 擴展歐幾里得算法,以及增強線段樹第114章 收音機,以及1:10?第160章 只能看到文章本身第61章 記憶和遺忘的生物學原理第15章 夏雨菲的羨慕第285章 “彈性碰撞”第316章 順藤摸瓜第359章 大佬,怪蜀黍?