小说-《重生在csp-j第一轮考场,但是全球除我以外信息学能力下降1000倍》— 3

77 阅读9分钟

4-初试集训

周末清晨,我按照李教授给的地址,来到大学计算机实验楼。推开特训班教室的门,一股冷气夹杂着新鲜电脑硬件的味道扑面而来。教室里已经坐了十来个学生,个个神情肃穆,面前清一色配置顶级的电脑。

李教授看到我,招招手:“wujinyu2012,来了?找个位置坐吧。今天我们主要是摸底,了解一下各位同学的基础和潜力。”

我点点头,选了个靠后的位置坐下。旁边的男生推了推厚厚的眼镜,打量了我一下,语气带着一丝不易察觉的优越感:“你是哪个中学的?我是师大附中信息学竞赛组的。”

“七中。”我简单地回答,没有多说。师大附中是传统的信息学强校,在我原来的世界也是如此,看来这个设定没变。

“七中?”他愣了一下,似乎在记忆里搜索七中的信息学竞赛成绩,“哦……挺好的。”语气里的那点优越感又回来了。

李教授走到讲台前,打开投影:“同学们,欢迎来到特训班。在开始系统训练之前,我们需要对各位的当前能力有一个清晰的认知。今天上午,我们将进行一场小型的摸底测试。”

屏幕上亮出了题目要求。不是Scratch,而是一种我从未见过的、极度简化的文本编程语言,叫做EasyCode。据李教授介绍,这是目前信息学竞赛推荐的入门语言,旨在降低初学者的门槛。

“第一题,”李教授念道,“请使用EasyCode编写程序,计算并输出1到100之间所有整数的和。”

教室里瞬间响起一片倒吸凉气的声音。
“1到100的和?这要用循环吧?”
“EasyCode的循环语法是什么来着?for i in range(1,101)?”
“不对吧,我记得是 repeat 100 times with i from 1 to 100?”
“那个输出语句呢?是 print 还是 output?”

我身边的师大附中男生已经打开了官方文档,开始紧张地查阅EasyCode的语法规范,嘴里喃喃自语。

我看着这道题,内心毫无波澜,甚至有点想笑。高斯求和公式(n*(n+1)/2)瞬间在我脑中闪过,但为了避免过于惊世骇俗,我决定还是用循环。

然而,当我打开官方文档查阅EasyCode的语法说明时,我沉默了。这种语言的循环结构冗长而笨拙,变量声明繁琐,甚至连基本的算术运算符都用了全拼单词 addsubtractmultiplydivide 来代替 +-*/

根据语法,我尝试用这种语言编写代码:

define an integer variable s.
assign 0 to s.
start loop->repeat 100 times with i from 1 to 100:
    Set s to the sum of s and i, and assign the result to s.
output once s.

这……这编程效率得低到什么程度?

踌躇了几秒,我做出了一个决定。我举手:“李教授,我可以用另一种方式写吗?

李教授有些诧异:“另一种方式?EasyCode是规定语言。当然,如果你指的是算法思路不同,只要能用EasyCode实现就可以。”

“不,”我平静地说,“我的意思是,我可以用另一种更……高效的编程语言来写吗?”

教室里瞬间安静下来。所有目光都聚焦在我身上,包括那位师大附中的同学,他眼镜后的眼睛瞪得溜圆。

“另一种语言 ”李教授扶了扶眼镜,好奇大于责备,“你说的是?”

“C++。”

我吐出这个词。

整个教室陷入了一种诡异的寂静。同学们面面相觑,脸上写满了困惑,显然对这个名字感到无比陌生。

李教授的表情变得极其严肃,他快步走到我的电脑前:“C++?你从哪里知道这个名字的?”他的声音里带着一丝不易察觉的冲动。

“在一本很老的黄皮书 某本编程书里看到的,”我编了个理由,“我觉得它的语法更简洁,就自学了一下。”

李教授深吸一口气,紧紧盯着我的屏幕:“好!你用你所说的C++写给我看。如果你的程序能正确运行,并且……并且我能看懂的话。”

得到许可,我不再犹豫。打开一个空的文本文件,手指在键盘上轻盈起舞。

#include<bits/stdc++.h>
using namespace std;
int main(){
    int s=0;
    for(int i=1;i<=100;i++){
        s+=i;
    }
    cout<<s;
    return 0;
}

短短十行,清晰流畅。在我写代码的几十秒里,整个教室鸦雀无声,只有我敲击键盘的清脆声响。同学们都伸长了脖子,像看天书一样看着我的屏幕,那些#includeint main()for (int i=1; i<=100; i++)+=cout 对他们来说,完全是另一个世界的符号。

写完后,我看向李教授。只见他死死地盯着屏幕,眼中闪烁着极度震惊的光芒。

“这……这语法……这结构……”他声音颤抖,“如此简洁!如此高效!这个 for 循环!这个 += 运算符!这比EasyCode先进了无数倍! 你……你是怎么学会的?!”

在洛谷上花599在网校上学的 自学的,教授。那本书讲得很详细。”我保持镇定。

“运行它!”李教授几乎是用命令的语气,同时招呼其他同学,“你们都过来看!好好看!”

如何在电脑上运行一个C++程序成了下一个问题。这个世界的编译器似乎也只有EasyCode的官方IDE。我再次举手:“教授,需要一个能编译C++的工具……”

李教授立刻对助教说:“快!去我办公室,把我那台旧的‘研究用机’搬过来!那上面应该还留着一些古老的开发工具!”

助教飞奔而去。等待的几分钟里,教室里的气氛变得无比微妙。同学们围在我的电脑旁,对着那十行代码指指点点,议论纷纷,看我的眼神彻底变了,从之前的漠视或好奇变成了纯粹的震惊和不可思议。

那台所谓的“研究用机”是一台落满灰尘的台式机,系统还是古老的Windows1 (? 版本。开机后,我幸运地在角落里找到了一个古老的Dev-C++

打开IDE,新建文件,粘贴代码,点击编译运行。

黑色的控制台窗口弹出,白色的数字“50505050”和光标。

“成了!”李教授猛地一拍手,激动得像个孩子,“看到了吗?同学们!这就是效率!这就是思维!wujinyu2012同学,你给我们所有人上了一课!”

那位师大附中的同学推了推眼镜,由衷地小声说:“……厉害。”

李教授在教室里来回踱步,情绪激动:“今天的摸底测试到此为止!wujinyu2012,你留下来!其他同学,今天的作业就是去思考,去感受你们刚才看到的那段代码所体现出的编程美学和思维差距!我们接下来的训练,要调整方向了!”(自豪)

同学们带着震撼和迷茫陆续离开,不时回头看我一眼。

空荡荡的教室里,只剩下我和激动未平的李教授。他看着我,眼神灼热。

“wujinyu2012,”他郑重地说,“你掌握的东西,可能远比你自己想象的还要重要和珍贵。你那本 ‘旧书’ ,还在吗?”

我看着教授激动的样子,知道在这个编程能力退化千倍的世界里,我脑海中那些被视为“基础”的知识,即将掀起怎样的波澜。

特训班的第一天,我“装”得似乎有点超出预期了。(雾

434\frac{3}{4}-写途感想

写了大概半个国庆吧,怎么说,挺唐的(……

国庆的时候会尽量多写点的,但实在肝不动了,提纲已经列好了,剧情大概会这样发展(不会剧透太多):

世界称犇→发现漏洞→启动奎因→返回原界

注:奎因将悖论分为:悖而不谬的悖论、既悖且谬的悖论、真正的悖论三种,但是他们的关系却不是并列的,第三类真正的悖论一旦得到确定和真正的消解就会像前两者转化。从奎因岁悖论的分类中,可以看出他对于悖论的理解是宽泛的,在他看来真正的悖论就是:引发了人类思维危机的源头,就是通过我们可以接受的推理方式产生出自相矛盾。它使得一些默认的和值得信赖的推理模式必须要得到明晰,并且从此要避免使用或对它们进行改正。(源自百度百科) 对后期奎因问题的理论化始于法月纶太郎在1995年发表在《当代思想》杂志上的文章《初期奎因论(Early Queen Theory)》。法月在这篇文章中指出,推理小说中存在两个尚未解决的认识论悖论,它们阻碍了读者对呈现在他们面前的谜题获得一个真正“公平”的视角。这两个问题被称为孪生后期奎因问题(twin late Queen problems),并成为了后来所有关于后期奎因问题的讨论的核心。他们是:

1.即使侦探可以提出他们的推理并解决案件,但这种推理的准确性是否能得到肯定地证明?

2.在这部推理小说中,侦探是否扮演了一个专横的上帝的角色,并决定了其余的演员的命运?

换句话说,小说世界的本质阻止了读者完全信任虚构作品中的事件所必需的确定性,导致侦探被视为不过是一个有缺陷的、变化反复无常的神。因此,只要他们缺乏这样的确定性,读者就永远无法真正看到一部“公平”的推理小说作品。

奎因在文章中指代一种可以从本质上监取并击破漏洞的代码