概述(Overview)

作为一个公司内专门设计和建造电梯系统的工程师,你最新的项目是为一个11层大楼的电梯设计一个高效的控制模块。电梯控制模块决定着电梯目前要去的层数和电梯目前的服务方向(即电梯要载去往上层还是下层的乘客)。

要求(Rules)

  1. 对于每一个已经乘坐电梯乘客,都必须将其送到目标楼层。
  2. 电梯不能向乘客目标楼层相反的方向移动。
  3. 电梯只有在空着或送最后一批乘客时(将要空时)才能改变服务方向。
  4. 有三部电梯。
  5. 只能从下表提供的几个电梯模型中选择。

    Model

  6. 三部电梯其中一个为货物电梯(载重>=14)。
  7. 所有的电梯必须服务于所有的楼层。
  8. 当任何一部电梯当前无法被使用的时候,乘客必须仍然可以使用剩下的两部电梯到达任一楼层。
  9. 控制模块不能有自己的内部时钟,但可以拥有一个计时器。
  10. 电梯没有传感器来得到货物的重量以及当前电梯内乘客的数量。
  11. 每层楼高为4米。

分析:

由规则1.2.可以知道,如果有乘客想去往某一楼层,则不能路过该楼层而不停下。

规则3.其实和1.2.是自恰的,如果电梯在仍有乘客时就改变了服务方向,必会违反1.或2.。

规则4.中所给出的电梯根据载客量可以分为货物电梯和正常电梯(参见规则6),而每一类中的每一部电梯都不处于完全劣势,因此无法直接排除选择任何一个。

规则7.废掉了那种「某部电梯只往返于OO楼和XX楼之间以优化平均时间」的想法。

规则8.是说不能有「所有电梯对乘客需求都置之不理来优化平均时间」的情况。

规则9.是说不能在规定的时刻用特定的算法,也就是不允许计对不同的scenario 设计程序。Timer 可以使用保证了不会有乘客被「饿死」的现象,即可以规定如果某人等待时长超过XX,则不顾一切先去接他。

规则10.是说无法预先得知楼层乘客的数量以及电梯内乘客的数量,从而不能根据这两个数据来判断是否在某一楼层停下。(比如电梯已经满员则不再接受任何乘客)

前期准备(Preparation)

电梯的模拟器已经写好,作为一个Project放出,你所要做的工作就是设计其中的控制模块。

电梯的其他重要模块以及接口简介:

一、GUI

GUI0

GUI1

GUI2

GUI3

二、布署

[java]
// (1) Setup two elevators
Elevator elevators[] = {
new Elevator(12, 6, 3.0), new Elevator(12, 6, 3.0)
};</p>

// (2) Setup a building
Building building = new Building(10, 4.0);

// (3) Setup a simulation stage
SampleStage stage = new SampleStage(3000, 0);

// (4) Create an elevator controller
BasicController controller = new BasicController();

// (5) Run a simulation with or without GUI
Simulator.run(stage, building, elevators, controller, true);
[/java]

三、建立电梯(Elevator)

[java]
// First, create an array of N elevators
// (N = # elevators in the building)
Elevator elevators[] = new Elevator [N];</p>

// Then, assign each array element an Elevator object
elevators[0] = new Elevator(12, 6.0, 3.0);
[/java]

参数的意义:

  • 参数 #1:容量
    • 即该部电梯的载客量。
  • 参数 #2:最大速度(单位 m/s)
  • 参数 #3:加速度(单位 m/s^2)
    • 即电梯速度的变化率。
    • 电梯在保证能在目标楼层停下的情况下会自动加速至最大速度。

四、建立建筑物(Building)

[java]
// Create a building object
// (10 floors, and each floor is 4m in height)
Building building = new Building(10, 4.0);
[/java]

参数的意义

  • 参数 #1:总层数
    • 包括第0层。
  • 参数 #2:层高(单位 m)
    • 所有楼层高度相同。

五、情景模型(Scenario Stage)

一个情景模型控制着:

  • 模拟器持续的时长
    • 以时钟周期(clock tick)计算;1 clock tick = 0.1s
  • 乘客流动模型
    • 控制乘客从X层至Y层请求的频率。
    • 多位乘客可以在同一时刻发出去任一楼层的请求。

六、电梯控制模块(Elevator Controller)

电梯控制模块决定着电梯目前要去的层数和电梯目前的服务方向(即电梯要载去往上层还是下层的乘客)

算法描述(Algorithm)

一、Basic Algorithm

最简单的办法,对每一个电梯布署同样的控制模块,每次只上或下一层(现实中如果有这样的电梯一定会把人逼疯)。算法流程图如下。

BasicController

代码:

[java]
import org.segonds.elevators.model.*;</p>

public class BasicController implements Controller {
protected ControlledBuilding building;
protected ControlledElevator elevators[];

private int buildingFloors, topFloor;
public final Direction UP = Direction.UP;
public final Direction DOWN = Direction.DOWN;
public final Direction UNCOMMITTED = Direction.UNCOMMITTED;

@Override
public void setup(ControlledBuilding building) {
this.building = building;
elevators = building.getElevators();
buildingFloors = building.getNbFloors();
topFloor = buildingFloors - 1;
}

@Override
public void reset() {
// nothing to do
}

@Override
public String getName() {
return "Basic Sweep Controller";
}

@Override
public void tick(Clock clock) {

// For each elevator
for (int i = 0; i &lt; elevators.length; i++) {
ControlledElevator elevator = elevators[i];

double speed = elevator.getSpeed();
int currentFloor = elevator.getFloor();

// If the elevator is currently stopped at a floor and if its
// doors are opening.
if (speed == 0.0 &amp;&amp; elevator.isOpening()) {

// If the elevator was moving up
if (elevator.getDirection() == UP) {

// If the elevator is at the top floor, reverse its direction
if (currentFloor == topFloor) {
elevator.setDirection(DOWN);
elevator.setTarget(topFloor-1);
}
else // Otherwise, continue to move up to the next floor
elevator.setTarget(currentFloor+1);
}
else
if (elevator.getDirection() == DOWN) {

// If the elevator is at the ground floor, reverse its direction
if (currentFloor == 0) {
elevator.setDirection(UP);
elevator.setTarget(1);
} // Otherwise, continue to move down to the next floor.
else
elevator.setTarget(currentFloor-1);
}
}

if (elevator.getDirection() == UNCOMMITTED) {
// If the elevator is idle. (initially)
elevator.setDirection(UP);
elevator.setTarget(0);
}
} // end for each elevator
}
}
[/java]

二、Baseline Algorithm

上面的那个控制模块的优点是……好吧还真没什么优点。为了改进它,提出第二个控制模块,这也是现今大部分商场等电梯常用的控制程序,并没有什么特殊的优化,只是处理掉了Basic Algo的那些脑残特性。算法流程图如下。

BaselineController

代码:

[java]
import org.segonds.elevators.model.*;</p>

// Reference implementation of the Baseline Controller (as described in the
// lecture note)
public class RefBaselineController implements Controller {
/* Declaration of instance variables */
// The building object
ControlledBuilding building;
// An array of all elevator objects
ControlledElevator E[];

// Number of floors
int nbFloors;
// Floor number of the top floor
int topFloor;

// Set up shorter aliases
final Direction UP = Direction.UP;
final Direction DOWN = Direction.DOWN;
final Direction UNCOMMITTED = Direction.UNCOMMITTED;

public void setup(ControlledBuilding b) {
// Save a reference to the building object for later use
building = b;

// Obtain a reference to the array of elevators
E = building.getElevators();

// Save these constants for easier access later
nbFloors = building.getNbFloors();
topFloor = nbFloors - 1;
}

// Nothing to reset
public void reset() {}

public String getName() {
return "Baseline Controller";
}

public void tick(Clock clock) {
// For each elevator
for (int i = 0; i &lt; E.length; i++) { // Elevator's velocity. speed == 0 =&gt; Stopped;
// speed &gt; 0 =&gt; Moving up; speed &lt; 0 =&gt; Moving down
double speed = E[i].getSpeed();

// Committed Direction
Direction CD = E[i].getDirection();

if (CD == UP &amp;&amp; speed &gt; 0)
handleCase1(i);
else
if (CD == UP &amp;&amp; speed == 0)
handleCase2(i);
else
if (CD == DOWN &amp;&amp; speed &lt; 0)
handleCase3(i);
else
if (CD == DOWN &amp;&amp; speed == 0)
handleCase4(i);
else
if (CD == UNCOMMITTED)
handleCase5(i);
}
}

public void handleCase1(int i) {
int nextFloor = E[i].nextStoppableFloor();

// If floor x is a candidate, candidates[x] will be set to true
// Note: All elements are initialized to false by default.
boolean candidates[] = new boolean [nbFloors];

// Locate candidates
for (int f = nextFloor; f = 0; f--)
if (building.isFloorRequested(f, DOWN) || E[i].isFloorRequested(f))
candidates[f] = true;

// Initially use -1 to indicate "target not found"
int target = -1;

// Find the highest candidate floor as the target
for (int f = topFloor; f &gt;= 0; f--)
if (candidates[f] == true) {
target = f;
break;
}

// If we can find a target
if (target != -1)
E[i].setTarget(target);
// Otherwise, treat the case as an idle case
else
handleCase5(i);
}

public void handleCase4(int i) {
int currentFloor = E[i].getFloor();
if (currentFloor == 0) {
handleCase5(i);
return;
}

// Nothing to do if the elevator doors are NOT in closed or
// closing states
if (! E[i].isClosing() )
return;

int nextFloor = currentFloor - 1;

boolean candidates[] = new boolean [nbFloors];

for (int f = nextFloor; f &gt;= 0; f--)
if (building.isFloorRequested(f, DOWN) || E[i].isFloorRequested(f))
candidates[f] = true;

int target = -1;

// Find the highest candidate floor as the target
for (int f = topFloor; f &gt;= 0; f--)
if (candidates[f] == true) {
target = f;
break;
}

// If we can find a target
if (target != -1)
E[i].setTarget(target);
// Otherwise, treat the case as an idle case
else
handleCase5(i);
}

// Handle uncomitted case
void handleCase5(int i) {

boolean candidates[] = new boolean [nbFloors];

for (int f = 0; f = 0; f--)
if (candidates[f] == true) {
target = f;
break;
}

if (target != -1) {
E[i].setTarget(target);
E[i].setDirection(DOWN);
return;
}

// Otherwise stays idle
E[i].setDirection(UNCOMMITTED);
}

}
[/java]

在写下这个标题的时候,我就知道我又可以放肆一会儿了。

在我正常的时候,常常想人真是很蠢的生物,连自己都控制不了。一点点小事也能引发各种情绪,而情绪一旦上来了自己还一点儿办法也没有。于是我又常常提醒自己理智一点儿,别干出什么让将来的自己看不起的事情。但是越想越害怕,总怕会被他鄙视,甚至怕他会气急了穿越回来大耳刮子抽我。可是有什么办法呢?没有现在的我也就没有将来的他,没有将来的他也就没有他回来抽我这回事;如果丫真的回来抽我了,那也许还就是这一巴掌使得事情朝他所知的那个方向发展。我至今还没有看见过他,说明到目前为止我还干得不错。

我想我只能控制心理的一个大致走势,给它把把方向,总还是免不了要起起伏伏。有时候烦闷起来仔细想想好像也没什么特别值得烦闷的事。女孩儿们还可以拿例行公事来当作藉口,而我每到这时便不知道说自己什么好了。

最近看了一些书,常常有被击中的感觉。看到兴处一个人手舞足蹈一番。我早就说我讨厌名著。一是因为被太多人咀嚼过,这样很容易把他人的口水当作作品本来的味道。再就是对本身故事纯粹的不喜欢。如果你因此鄙视我,那我也没意见。但你如何也不能逼着我对它们喜欢起来。故事好不好,我自己来辨别。你总告诉我这些就是好的那些就是糟的,这使我想到文化大革命中的感觉。

我一下午都不困,但却很没精神。我拖着没有精神的身子来到图书馆,翻开那谁谁和那谁谁互相写的情书,对着窗子傻笑,模样颇有点猥琐。并不是我刻意去找这些东西看,而是它自己附到了杂文集的最后。我猜算是给读者的福利。如果真是如此这个作者的良心已经达到了让我敬佩的地步。

看到这些我再不想起些什么那就真的不对了。一直到分开后很长很长一段时间我还是频繁地梦到她。一开始还有些甜蜜的场景,后来便更多的是目光偶尔相遇时她刻意避开的那个霎那。那种目光可真厉害,一下就能把我拉到地狱。最近一段时间这样的梦也越来越少了,而且梦里的人物也越来越不清晰。我只能远远地望一眼,然后任凭她倏地消失。但是偶尔她也一回头,没有表情地看我一眼,我就立马被吓个半死,赶紧逃掉了。我想这与分开时的那段经历有关。她对我说出的看法每一条都像是控诉,我因此一直深深内疚。我对这个我爱的女孩儿都做了什么?但她再也没有给我弥补的机会,我只能这样痛苦地内疚着,回避着她,以至于在心里想一下她的名字都会不由一阵心慌意乱。

我继续翻着这些情书,似乎又找回当时的感觉。我们当时也有情书来着,我觉得一点也不比他们的逊色。我想想,以她的性格,应该会把它们付之一炬吧。转而又想,以她的性格,应该会保存起来的吧?我不知道了。在他们的情书中,这两个人讨论了爱情的幻灭感,我看了大有触动。「别怕一切美好消失,咱们先让它存在」。这话说得太好了。如果因为对未来的担忧而否定现在,甚至因此而拒绝享受现在,这不也是荒谬的么?如果我早能参透这一点说给她听就好了。

她说的那些毛病,现在我大抵是改好了。但是我还不能完全自信。而就其中一点而言,我倒没有那么重的负罪感了,因为我知道当时是真的爱的。出于爱这个好的出发点,有些事看起来也不是那么可恶。不知道她看了这些话会不会在心里骂我。对于这一点,我仍是没有自信的,我怕她会轻蔑地一笑,没有任何感觉。

我差点儿就放纵自己了,幸好没有,希望以后也别有。

我先说,复习这件事并不是我自愿的选择。在我心中,复习是排在辍学之后的,但我在这里大谈复习的意义,却也并非给自己找一个心里慰藉。

前几天,和姐在视频通话的时候,我带有几分玩笑地告诉她我现在似乎又找到当好学生的感觉了,可她却有点失望地提醒我说我以前一直是好学生来着,现在怎么却说出这样的话。确实,在上高中之前,我还一直被当作好学生对待,但自从踏入这个所谓重点高中的大门,这种地位就一去不复返了。

其实你们也知道我说的这个「好学生」是什么意思,还有我对那群「好学生」有多鄙夷。但这种想法却是自高考前夕才产生,而于复习期间发展起来的。在那之前我也会用不屑的眼光看那些整天埋头书本的人,但那更多是出于嫉妒,或者是因为他们被官方树立成榜样而使我产生的逆反。在一张张成绩单下来之后这些不屑便烟悄云散了,失败总能把人打击地毫无脾气。现在看当时的自己更多地感觉可笑(毕竟是自己,说话还是要客气一些,讽刺挖苦就此打住)。但是到高考,我越来越看到这一人才选拔制度都催生了怎样一批「人才」。「高分低能」只是其中的一个极端,我说的不是他们,而是更多的人们看起来「正常」的学生,和他们被高考灌输的思想。

如果只看到这些,那我的复习便更加没有意义了。最近清华的特奖获得者马冬晗的一张时间安排表在网上引起一片争议。舆论自然而然地分成了两派。照往常,我会站在哪一个队伍里,你们应该都清楚。但这次我还真没有站在那队里。当然了,我更不可能站在另一边。不站队的好处是可以保持清醒的头脑,不丧失理智,而且能看到两队各自看不到的东西。我身边不缺马冬晗,让我举能举出一大堆。然而在一片批评声中,我也不免替她们叫屈。我们的教育体制和文化理念使她们自然而然地得到了「优秀」的头衔。她们达到了这一体制所灌输的全部优秀的标准。她们没有任何错误。这就像如果某一个体制一直强调体育的重要性而其他一概不论的话,你也会觉得博尔特等体育明星「优秀」一样。可能你摒弃了所谓普适价值观,但你不能因此而否认以此为信条的人她们的努力和成功,各走各的路罢了。而想到这里,我在面对「马冬晗」们时,便能保有心中的尊敬,同时我行我素而略无慕艳意。

在复习期间,因为大部分知识基础仍在,因此我有更多自己的时间。而图书馆恰又能使我在我所笃信的领域有所提升。就这一点而言,较之于我所了解到的步入大学的同学们的生活,我还是颇有优越感的。能在读书中渐渐明白自己的追求,这便是复习的意义之一。

可能你觉得这好像和复习没有太大的关系。我不这么想,如果没有这一重大的改变,我甚至不会有这样的思考,或埋没于技术之间,或止于站队摇旗呐喊。复习好像在我正得意自大的时候给我的抡圆了的一嘴巴,抽到我嘴角出血,却让我停下思考。

我和同学聊天儿,大部分人很关心我的学习情况。关于这点,我想说,有关学习便是复习的又一意义。

这不是废话么?否则这一年你干嘛吃的?

是,也不是。我仍旧痛恨体制教育的弊端。但在这之中,我还真的找到了一些积极的意义。

已经有两次月考过去,实话说,都不理想。第一次考完我还羞羞答答不愿意说它,现在不一样了。高考的知识不难,到最后大家都基本上没有了不会的题目,但考出的结果分数差距仍在。我以前会把这归于一「粗心」而草草了事,这么做了便不仅仅是分数上的差距了。某些情况下,「过程比结果更重要」是一句屁话,它只是那些失败者说来安慰自己罢了。逃避失败而不敢面对的人无法收获成功。今年的复习让我看到了自己的弱点。这一弱点如果没有高考的失利,我不会重视。而如果不在这人生的早期尽快解决,它势必会将以后的我绊得更惨。想到这里,我甚至觉得复习是对我的馈赠了。

复习似乎在解决着我身上两大重要问题。而它们在某种程度上甚至还是对立的。这真是不错。

自从开始学习历史这门课,我心里就一直对它充满鄙夷。最近听语文老师在课上讲段子,说理工科的学生将来不愁生计,不信你考一个清华建筑系试试,哗一栋房子起来你的腰包就满了;再不信你考一个北大历史系试试,站大马路上嘚啵嘚背俩小时历史,看看有没有人理你。我想类似的这种思想在很多人脑子里根深蒂固,但我写这篇文章的目的也并不是要扭转它。事实上,早在初中的时候我就本着酸葡萄心理鄙视那些历史得满分的同学——你知道鸦片战争在一八四零年就怎么了,得意什么?

其实,当年那些同学也可以反过来质问我,你知道那两个三角形相似就怎么了,得意什么?这里对基础学科的重要性略去不论,主要体现了我对历史课有很大偏见的思想感情。

因为在中考中占有很大比例,所以历史课还不得不学。不得不学,那我就不好好学。正巧老师也不好好讲,假借「自主学习」之名每堂课发一张学案了事,既省去他照本宣科的唾沫,又落得教育改革的名声。但其后果可想而知。上了高中之后,我多次因为搞不清楚朝代先后和历史事件时间顺序被同学们无情无耻地耻笑。中考前夕还是幸得有保送的同学帮我强攻历史,才勉强获得了一个说得过去的分数。

中考以后的假期在网上闲逛的时候看到袁腾飞的历史课。那一次简直颠覆了我对历史的固执偏见。他的段子至今我还记忆犹新,第一次感觉到历史还他妈能这么讲。

由于网络的热炒,袁Sir的书在我高一刚开学的时候面世了,叫《历史是个什么玩意儿》,书脊上写着「易中天和郭德纲的结合」。我马上入手一本,在三天无聊的「入学教育」时读完,几乎就和听单口相声一样酣畅淋漓。当时的我「历史感」爆棚。趁着热乎劲儿又读完了当年明月的《明朝那些事儿》。这本书离历史较远,当作小说看还可以,不过这不是重点。

但是好景不长,因为高中入的是理科实验班,所以配备了一个新来的学生气还未消而略显羞怯的女历史老师。我只能说,她在很努力地讲课,很努力地让这门枯燥的课有意思起来。有一次我下课找她问题时,发现她也在看《历史是个什么玩意儿》。而后的若干节课,她便开始抛出袁Sir的段子。但无论表情,语气,还是时机的把握都相差太远,完全引不起注意。看着好好的素材被她折腾成无人反应的冷笑话,我实在于心不忍。可能是同情她和她的历史课,也可能是同情那些段子,我又去找她。这次我主要想委婉地表达「您那课上得太没劲了,段子不是那么个讲法」的中心思想。但是首先因为面对的是一个和我年龄相差不大的羞涩的女性,表达能力因此大打折扣,其次也可能因为我说得确实太委婉了,总之最后被她误解成我认为她上课「太严肃了」。于是她开始给我解释她其实很随和只是笑起来别人看不大出来大学老师还因此以为她有什么不满找她谈过话云云。这一次生动的沟通经历使我们双方都印象深刻,以至于高二会考结课那一次她还当众回忆和我说过的那番话,引得同学一片起哄。我还欲哭无泪呢,高中历史又荒废了。

历史课从此在我的学习生活中告一段落,接下来说说历史。

虽然我大部分时间都讨厌历史课,但却从来没有放弃想要了解历史。这肯定有一部分是受了「以古为镜知兴替」云云的影响,但更多的缘于单纯的好奇。这种好奇随着年龄增长和阅读量增加反而有上升趋势。愤青的那段日子里,我对所有有关体制极尽讥讽之能事。后来冷静下来通过对体制问题的不深入的思考自然地引向了其历史背景。最初了解了那一年发生的事,后来看到文革,了解了越来越多有意思却鲜为人知的官方历史背后的事情。最近,我花了两周时间在图书馆读完的《文武北洋》又使我对我党有了更为深入的理解。《乌合之众》说历史就特么是政治,只要有政治存在,就不会有什么真实的历史。这话说得有些绝对,但某些时候可能情况确实如此。因为政治需要,一些人会被打成十恶不赦的坏蛋——陈独秀因为反对斯大林的专政统治,看穿了美好承诺背后的阴谋和谎言而被戴上了莫须有的「汉奸」「日本间谍」的帽子;另一些人则会被塑造成人格完满的无产阶级战士——李大钊灰溜逃窜的模样和被「远方」苏联利用时的狼狈神情,永远不会见诸于任何官方文献。我开始想我学到的历史有多少是真实存在,而有多少是因为需要而捏造出来的。

读史越多,越发感慨。对于历史,纵使我不是「对真相有洁癖」,但也容不得是非颠倒的胡改乱编。我想我需要的,只是那些本该被铭记和借鉴的东西的真实再现罢了。我认为不算过分的这一点要求在这一神奇的土地上实现的日子却遥遥无期。而对于这一点,元芳,你怎么看?

逢中秋国庆双节,一一打电话问候了不能回来的同学们。然后在短短的三天假期里和滚回来的几个同学小聚了一下,几乎占满了所有空闲时间。大学生活异彩纷呈。我在打探各个大学情报的同时,听着大家用平静的语气讲自己不平静的大学生活,震惊之余,急忙记录下来。

先说说没回来的同学吧。这些人有的因为家长不在不能回家,有的因为成本太高回不起家,还有的因为玩得太嗨顾不上回家。暂时还没有发现因为学习太忙不能回家的学霸,这让我很是欣慰。和在北京的一个姑娘通话,我的三观在短短的三十分钟之内被翻来覆去地颠覆。从前一个内向文静的孩子,在我拿起电话说了声「喂」之后,就再也没有给我第二个机会说一句完整的话,一个人好嗨皮的嘚啵嘚了二十分钟,在我终于把话题引向大学情报方面她才得以短暂喘息。我根据她边吃着东西边和我哼哼唧唧地说话的语气脑补那边的场景,惊出一身冷汗。稍微平静了一下心情,打电话给兴爷。其实之前心里就在打鼓了:这个点儿打电话不会不合适吧。在我马上就要按挂断键的时候电话接通了,电话那边传来兴爷惊恐的声音:「钢哥?」我心里叹息一声,说:「你丫在小树林和那谁在一块呢吧?」……和我想的差不多,北大的生活波澜不惊,学业繁忙,有各种活动但学习还是王道。之后他还很大方地让我和他身边的那谁说了说话,元培竟然忙不过化学系,这是让我没有想到的。

后来打的几个电话,内容就类似了。除了清北之外我听到的大部分是抱怨声,然后转而就是一脸恨铁不成钢地看着我,教育我一定要好好学习。第二天第三天和同学聚会的时候,我把大家谈论最多的内容和电话里听到的对比了一下,然后竟然得到了大家都很空虚寂寞没有下限这种结论我会随便乱说么。好吧,风华正茂的恰同学少年们说的最多的当然是妹子了,大沙航果然不负工科院校的盛名,奇葩的男女比例培养了大批猥琐宅男,远姐随随便便当个系花不成问题,被哥哥们惯得愈发傲娇了。风姿绰约的恰同学少女们说的最多的也是哥哥了,据说贸大的哥哥们走在马路上被各种美女要联系方式是一件很正常的事情,品学兼优,温柔贤惠的美女学姐们整天窝在宿舍想汉子。大沙航和贸大的同学们碰到一起,一个哭诉着「没女生啊没女生」,一个哭诉着「没男生啊没男生」,怕如不是有我等外人在场,早就干柴烈火了吧。

清华有个有意思的活动,跳交际舞。是和北外联谊一起举办。学长们谆谆教导下一代「女生们要打扮得漂亮一点,男生们要放下节操。机不可失,失不再来。」我大附中出去的几个同学貌似都找到了合适的舞伴,回来一通炫耀。我问Shit是怎么勾搭上姑娘的,他说拉了一卡车北外的姑娘来,下了车看见哪个顺眼随便选,就和那什么似的。「就和那什么似的……」

我问到选课,这个方面浙大给我印象很深。跨专业(文、理、工)选课系统很给力,课程也比较有意思,Gnnng竟然选到了「桥牌」这等逆天的课。他告诉我国庆的作业是打够三十把桥牌的时候,我依稀想起和初中同学在一起的时候,意淫以后的学校布置作业会是「通掉COD的第一幕」 「这星期老鸟级别任务必须过掉……」 「联机游戏人物必须升到XX级」 「玩够XX个时长,家长监督」……擦掉口水,继续说。大部分学校因为军训完刚开课不久,选修还没有开始上。但老师总是强调大一不推荐选报选修课,过不了的话学分是个问题。嗯,学分这个东西……

不知道给我留下的印象对不对,学校总以学分要挟学生。留学,考研,奖学金,无一不和学分挂钩。于是就自然而然地出现了那些为学分而学习的人们,选自己不喜欢的课,只因为这些课学分高、容易过。思修,马哲(注意我说的是中国特色的),这些课尽管真正想上的人寥寥,但因为学分多或因为是必修内容而颇受重视。教育不息,洗脑不止。

娱乐活动实在有限。虽然恰同学少年少女们聚在一起两眼泪汪汪,但终究扛不住一下午在一起只是聊天而没有更进一步的动作。但反过来想想,可能就这样像自己家人一样完全放松地泡在一起也是一种幸福吧。