第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值。

接下来就是比较好玩的东西了。

对拍。

第135章 巧合?考验?第85章 吊桥效应第122章 骗过多少女孩子?第228章 恐怖如斯第285章 “弹性碰撞”第182章 罪证都没销毁干净第40章 好朋友来了第113章 刷分的可能性第212章 他和夏总到底什么关系?第46章 月考开始第50章 可能整大发了第316章 顺藤摸瓜第409章 晨曦III巨型计算机第186章 有我七成功力了第145章 陈萱的邀请第365章 一套接着一套第197章 除了不能说的第344章 好险间接那个啥第340章 实力还是运气?第276章 丢1分和拿满分,哪个更难?第40章 好朋友来了第185章 是不是太敏感了?第162章 奇怪的U盘第138章 避蚊胺,登山第367章 老板娘第367章 老板娘第29章 王璐有点自闭第318章 飞机点餐攻略第160章 只能看到文章本身第151章 那就别走了第317章 为什么偏偏是那串数字?第43章 写字机器人第70章 水上公园第69章 论如何追女孩纸第195章 二八佳人体如酥第141章 金装四大才子第233章 误差反向传播算法第418章 阿法狗不出,谁与争锋?第340章 实力还是运气?第165章 看谁先怂第151章 那就别走了第165章 看谁先怂第363章 终于对《我的世界》下手了……第325章 说好的理想男神呢?第16章 倔强的夏雨菲第401章 有种奇遇叫顿悟第89章 进入状态这么快?第244章 屋里陪他小电影?第290章 其实已经有点过时了第242章 搞出问题怎么办?第360章 造了什么孽?第13章 “感知机”和“M-P模型”第4章 万界爬虫系统第224章 上瘾了怎么办?第208章 有埋伏第326章 “战神一号”的弱点第75章 金少楼的警告第299章 胆大妄为,实力恐怖第126章 八楼的直升飞机第350章 男生不准进去的地方第261章 晓之以理,动之以钱第261章 晓之以理,动之以钱第188章 金风玉露一相逢第376章 很像一台成熟的计算机了第77章 多少次回眸第79章 李东的Show time第280章 这就成了“学者”了?第51章 任务分析第223章 她不会玩真的吧?第193章 这也太考验人了吧?第281章 当场抢人第323章 麻雀还是蚊子?第147章 有点深奥啊第169章 最后0.5公分第386章 测量“虚拟空间”的曲率第156章 你高兴的太早了第41章 要是不帅不酷呢?第197章 除了不能说的第205章 江寒的心性第269章 易中海的困境第163章 万能逼近定理第168章 本能反应第211章 就当帮他们改进一下服务质量了第232章 江寒的野望第410章 六度分割理论?第115章 无线电发射器第108章 情趣第322章 愚者注视着你第203章 谁支持、谁反对?第369章 点八个,赠十个……第284章 江寒的操作第398章 商用级手写识别算法第151章 那就别走了第390章 两份DNA检测报告单第344章 好险间接那个啥第398章 商用级手写识别算法第92章 《激光雕刻机》第4章 万界爬虫系统第184章 眼神这么好使的吗?第396章 线性CCD扫描相机
第135章 巧合?考验?第85章 吊桥效应第122章 骗过多少女孩子?第228章 恐怖如斯第285章 “弹性碰撞”第182章 罪证都没销毁干净第40章 好朋友来了第113章 刷分的可能性第212章 他和夏总到底什么关系?第46章 月考开始第50章 可能整大发了第316章 顺藤摸瓜第409章 晨曦III巨型计算机第186章 有我七成功力了第145章 陈萱的邀请第365章 一套接着一套第197章 除了不能说的第344章 好险间接那个啥第340章 实力还是运气?第276章 丢1分和拿满分,哪个更难?第40章 好朋友来了第185章 是不是太敏感了?第162章 奇怪的U盘第138章 避蚊胺,登山第367章 老板娘第367章 老板娘第29章 王璐有点自闭第318章 飞机点餐攻略第160章 只能看到文章本身第151章 那就别走了第317章 为什么偏偏是那串数字?第43章 写字机器人第70章 水上公园第69章 论如何追女孩纸第195章 二八佳人体如酥第141章 金装四大才子第233章 误差反向传播算法第418章 阿法狗不出,谁与争锋?第340章 实力还是运气?第165章 看谁先怂第151章 那就别走了第165章 看谁先怂第363章 终于对《我的世界》下手了……第325章 说好的理想男神呢?第16章 倔强的夏雨菲第401章 有种奇遇叫顿悟第89章 进入状态这么快?第244章 屋里陪他小电影?第290章 其实已经有点过时了第242章 搞出问题怎么办?第360章 造了什么孽?第13章 “感知机”和“M-P模型”第4章 万界爬虫系统第224章 上瘾了怎么办?第208章 有埋伏第326章 “战神一号”的弱点第75章 金少楼的警告第299章 胆大妄为,实力恐怖第126章 八楼的直升飞机第350章 男生不准进去的地方第261章 晓之以理,动之以钱第261章 晓之以理,动之以钱第188章 金风玉露一相逢第376章 很像一台成熟的计算机了第77章 多少次回眸第79章 李东的Show time第280章 这就成了“学者”了?第51章 任务分析第223章 她不会玩真的吧?第193章 这也太考验人了吧?第281章 当场抢人第323章 麻雀还是蚊子?第147章 有点深奥啊第169章 最后0.5公分第386章 测量“虚拟空间”的曲率第156章 你高兴的太早了第41章 要是不帅不酷呢?第197章 除了不能说的第205章 江寒的心性第269章 易中海的困境第163章 万能逼近定理第168章 本能反应第211章 就当帮他们改进一下服务质量了第232章 江寒的野望第410章 六度分割理论?第115章 无线电发射器第108章 情趣第322章 愚者注视着你第203章 谁支持、谁反对?第369章 点八个,赠十个……第284章 江寒的操作第398章 商用级手写识别算法第151章 那就别走了第390章 两份DNA检测报告单第344章 好险间接那个啥第398章 商用级手写识别算法第92章 《激光雕刻机》第4章 万界爬虫系统第184章 眼神这么好使的吗?第396章 线性CCD扫描相机