loading ...
loading...

2007-05-10 | 百度之星程序设计大赛总决赛试题曝光

分享
        近日,“AStar”2006百度之星程序设计大赛总决赛成绩揭晓。决赛中来自全国数百所知名高校的50名选手汇聚京城举行了激烈的角逐。清华大学的楼天成最终获得胜利,摘取了本届百度之星桂冠。

  本次总决赛的题目得到了赛手们的广泛好评。目前百度启动了ASTAR趣味赛(http://star.baidu.com/data/final/final.html),所有的编程爱好者都可以进入比赛系统来参与决赛题目“俄罗斯方块”的解答。这道题目的答题环境将于8月6日开放,届时所有用户注册ASTAR系统都可以登陆答题系统参与总决赛题目“俄罗斯方块”的题目解答,程序的最终提交时间为9月中旬,成绩最好的5人还将获得百度的特别礼物。

  喜欢编程的朋友不妨来试试。

  附决赛题目:

  俄罗斯游戏中共有七种方块,每种方块都由四个方格组成,如下图所示,七种方块分别编号为1~7。



  游戏中,每次落下一个方块,落到一个宽度为10格的槽中。方块的下部一旦碰到槽的底部,或槽中已有的方块,就不能再移动。方块落下不动后,如果有某些行因落下的方块而填满,这些行将被消去。方块下落前,你可以控制方块的左右移动和旋转,以将其放在合适的位置。你对方块的所有移动和旋转操作在下落前(槽外)就计算完毕,然后直接下落到底,下落过程中不能再做操作。如果方块刚刚落下后顶部高度大于17行,游戏结束--即使此时有些行可以消除。

  交互方式

  你的程序应当包含tetris_lib.h,并连接相应的库文件。库中的两个重要函数是:

  void StartGame(int* t1, int* t2);

  int Step(int r, int l, int* next);

  你的程序应该首先调用StartGame,其中t1和t2表示前两个方块的编号(t2对应于传统游戏中的"下一个方块")。接下来,你的程序每次可以使用Step函数下落一个方块,返回消去的行数。r表示旋转方式(r=0, 1, 2, 3分别表示顺时针旋转0度、90度、180度、270度),l表示方块在旋转后的最左边一格的列编号(从左到右依次为1, 2, …, 10),而next表示方块落下后新的下一个方块编号(0代表没有下一个方块,下一次Step调用后库将自动终止你的程序)。你的程序不应自行终止。

  关于自测的提示

  调用StartGame函数时,库将从标准输入中读入若干行,每行包括一个整数,表示方块的编号。你可以利用这一点对你的程序进行测试。程序运行结束后,测试库将把结束原因和得分显示在标准输出中。

  库中还有两个函数可以用于自测:

  void SetLog(const char* filename);

  void Snapshot();

  如果需要测试库记录程序的行为,请在调用StartGame之前调用SetLog函数。

  评分规则

  在与测试库交互的过程中,出现以下条件之一,则库将终止程序:

  1、调用参数非法

  2、方块刚刚落下后,其顶部高度大于17行

  3、所有方块均已落下

  4、本数据的运行总时间超过1秒钟

  程序终止后,假设一次消去1行、2行、3行、4行的次数分别为a, b, c, d,则该数据原始得分为2b+6c+10d。换句话说,消去单独的1行不得分。

  对于每个数据,得分排名前八的程序分别得到10, 7, 6, 5, 4, 3, 2, 1分。如果原始得分相同,则消去行数多的排名在前;如果原始得分和消去行数都相同,则下落方块总数多的排名在前。如果三者都相同,则得分相同。消去行数为0的程序不得分,即使它排在前八。

  最终成绩按照50个数据的总分从大到小排序,如果总分相同则按所有数据的原始得分之和排序;如果仍有相同,则按所有数据的消去的总行数排序;如果仍相同,则名次相同。
分享 分享 |  评论 (0) |  阅读 (?)  |  固定链接 |  类别 (随笔) |  发表于 08:50
搜狐博客温馨提示:搜狐博客官方不会要求参加活动的各位博友缴纳任何的手续费用。请勿轻信留言、评论中的中奖信息,更不要拨打陌生电话及向陌生帐户汇款,谨防受骗!识别更多网络骗术,请 点击查看详情
您还未登录,只能匿名发表评论。或者您可以 登录 后发表。
 
  *中国人爱国心,搜狗输入法爱国主题皮肤下载>>
表  情:
加载中...
回复通知: 同时用小纸条通知对方该回复