第82页

处理器a每秒处理的指令时处理器b的2倍。某一特定程序分别编译为处理器a和处理器b的指令,编译结果处理器a的指令数是处理器b的4倍。已知程序在处理器a上执行需要1个小时,那么在输入相同的情况下,程序在处理器b上执行需要( )小时。

a4 b2 c1 d12 e14

最后的大题目有几个问答题和一个阅读程序题,这些题目对许毅来说自然是一点问题都没有。他很快就搞定了,懒得检查,就出来了。柳叶见到之后,把他好说了一通,不过许毅仍然是一副无所谓的样子。

上机编程,软件环境为debian lux,编译器有free ascal,也有g,也就是说编程语言可以从ascal和c语言这两种语言中任选一种,许毅选的是他拿手的c语言。

登录用户名和密码都是guest,开始参赛选手可以事先熟悉一下机器操作。许毅上来后所做的第一件事就是查看计算机的网络连接。要是这些机器组成了一个局域网,如果有人想作弊的话,那就容易了。不是给别人传答案,而是用自己的机器去攻击别人,让他们的系统出问题……不过比赛组织人员好像已经考虑到这个问题,所有的机器都是独立的,网络连接断开,连i都没有。

无趣。许毅无聊地打了个呵欠。然后开始看比赛的一些具体要求。因为是比赛,所有步骤都规定得一清二楚,什么“试题名称缩写”、“保存目录路径”、“输入输出文件名”等等等等一大堆的规定。要是不按照里面的来,就算你做得再好,也是白搭。

终于看完了那一大篇的说明和注意事项,许毅便开始看题。试题的通常格式是“题目描述”,然后是“输入文件”,“输出文件”,最后还会给出几个样例数据。总共有四个大题,每题对应一个源程序,源程序要能够符合题中给出的样例,当然,也得符合其他合法数据。另外还对程序的运行时间和效率有规定。

这几个题目对许毅来说实在是没有任何挑战,很快他就做到了最后一题:无聊的排序。

题目为:你弟弟有一项家庭作业需要你帮助完成。老师给了他一列数,需要他把这些数按升序排列。你可以每次交换两个数的位置,而一次交换的代价被定义成被交换的两个数的和。写一个程序,用最小的交换代价和来帮助弟弟完成这项无聊的排序工作。

输入:第一行为一个数n(n<=100),第二行为互不相同的n个数。

输出:输出一个数,为最小的交换代价和。

稍看了一眼,许毅就知道本题可以抽象为:把一列数从初始状态变成目标状态,即完成一个置换。根据群论知识,置换可以分解为s个不相交的循环的乘积。显然,由于每次只有被交换两个数的位置改变,所以要想改变一个数的位置,只能通过交换完成,而不能像插入排序一样,可以借助其他数来完成,即各个循环是相互独立的,所以应该依次完成每个循环。为了得到尽量少的交换代价,在每个循环中较好的方法是让循环中最小元素或全局最小元素参加所有的交换。至于用循环内的最小元素还是用全局中的最小元素,就要比较哪个交换代价更小了。将它作为压轴题相信对高中生或初中生来说难度应该很大吧,可在许毅面前已经变得和“hello,world”程序那样容易。

在脑海中想好怎么编写,许毅调出g,一口气就将这个算法给编写出来了。把测试数据代入试了几次,改动了几个小错误,大功告成!看了看周围的同学,有的在奋力输入,有的则在仔细读题,每个人都是一脸认真严肃的样子。再侧了身子看了看前面两排的黎姿姿,发现她在用笔在稿纸上画着什么。而她不远处的李帅则有些挠头搔脑的,好像很不安份的样子。

呵呵,看你这关怎么过。许毅正东张西望,结果被监考老师看到了,她走了过来。

“同学,请不要到处乱看。”

得,她还以为我想作弊呢。

“哦,好的,可是我已经做完了。老师,我交卷。”说完,不理一脸惊异的监考老师就走了出去。当然,后面跟着的还有一大片羡慕,崇拜,嫉妒的目光。