第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”存盤退出。

шωш ✿тt kдn ✿C 〇

接下來,回到終端中,輸入命令行指令:【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值。

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

對拍。

第48章 《如果時間能倒退》第79章 李東的Show time第283章 給靈感充點值第3章 一個大膽的想法第325章 說好的理想男神呢?第404章 神經系統疾病的終極治療手段第411章 不可不防,防不勝防第337章 拐着彎地誇自己?第34章 遊戲發佈第52章 “感知機”的初次實戰第127章 只怪準備得太充分了第266章 篩選模型,以及最後的優勝者第100章 談判第151章 那就別走了第345章 意外連連第430章 超算落成,九段助陣第63章 巧嗎?第183章 成功的路上沒有僥倖第138章 避蚊胺,登山第304章 不忘舊情,有恩必償第363章 終於對《我的世界》下手了……第357章 再給你一次機會第222章 《Adaline網絡》和《最小均方濾波器(LMS)》第231章 水漫金山第271章 破壞永遠比建設更容易第143章 別人笑我太瘋癲第197章 除了不能說的第326章 “戰神一號”的弱點第129章 兩道試題第153章 眼氣誰呢這是?第200章 真的只是惡作劇嗎?第80章 碰碰船和真人CS第336章 女孩的心思你別猜第238章 競爭對手?第59章 上乾貨第194章 睡不着怎麼辦?第74章 88年的草莓第322章 愚者注視着你第284章 江寒的操作第316章 順藤摸瓜第71章 憑什麼是江寒?第100章 談判第83章 髮卡第409章 晨曦III巨型計算機第429章 阿法狗的三板斧第363章 終於對《我的世界》下手了……第290章 其實已經有點過時了第95章 再花5000也值第346章 密室第306章 就剩這麼幾個了第314章 旗鼓相當?大獲全勝!第123章 BT小鳥第5章 三個系統準備就緒第272章 冤死駱駝的最後一根稻草第408章 初入燕園第321章 星戰銀行,黑卡飛刀第302章 聳人聽聞,觸目驚心第221章 超級大腦,人傑地靈第204章 是男人就餵飽她第74章 88年的草莓第101章 偷換概念第420章 強化學習的威力第187章 牀下的小畫冊第427章 詭異的附加關卡第368章 能幹的小秘書?第50章 可能整大發了第382章 電動車和機械臂第20章 寫論文第430章 超算落成,九段助陣第358章 27個學術點第28章 老宋的算盤第397章 作曲大師,自帶乾糧第415章 滿分入選國家隊第233章 誤差反向傳播算法第413章 得講究點格調第238章 競爭對手?第73章 臭屁不過金少樓第159章 想怎麼看,就怎麼看?第325章 說好的理想男神呢?第307章 沒有證據可不行第307章 沒有證據可不行第348章 只會下蛋,不會生寶寶第238章 競爭對手?第52章 “感知機”的初次實戰第227章 智能安防報警系統第305章 再不用就過期了第141章 金裝四大才子第418章 阿法狗不出,誰與爭鋒?第49章 高老師的難題第241章 學習改變命運第142章 哪捨得叫你疊被鋪牀?第197章 除了不能說的第245章 什麼事兒比NOIP還重要?第300章 沒有硝煙的戰鬥第279章 一舉成名天下知第126章 八樓的直升飛機第132章 做個小遊戲第308章 敬可愛又無常的命運第377章 打造自己的科技品牌第377章 打造自己的科技品牌