您的位置:首页 > 其它

2006年百度之星程序设计大赛试题初赛题目-题2-蝈蝈式的记分

2012-05-17 14:26 288 查看
题目名称:蝈蝈式的记分

内容描述:

蝈蝈小朋友刚刚学会了 0-9 这十个数字 , 也跟爸爸妈妈来参加百度每周进行的羽毛球活动。但是他还没有球拍高,于是大人们叫他记录分数。聪明的蝈蝈发现只要记录连续得分的情况就可以了,比如用“ 3 2 4 ” 可以表示一方在这一局中连得三分后,输了两分,接着又连得到四分。可是,后来大人们发现蝈蝈只会用 0-9 这十个数字,所以当比赛选手得分超过 9 的时候,他会用一个 X 来表示 10 完成记分。但问题是,当记录为“ X 3 5 ” 的时候,蝈蝈自己也记不起来是一方连续得到十三分后,再输五分;还是先赢十分输三分再赢五分。

因为百度内部就要开始进行羽毛球联赛了,要先摸清大家的实力才好分组比赛呢~于是,大人们想知道以前每局的比分是怎样的,以及谁获得了胜利。要是遇到了根据比赛记录无法确认比赛进程的情况,也要输出相应的提示哦。

需要帮蝈蝈进一步说明的是,比赛是五局三胜的,每局先获得二十一分的为胜,但是胜方必须领先对手两分或以上,否则必须继续比赛直到一方超出对手两分为止,比分多的一方获胜。任何一方先获得三局的胜利后就获得胜利,比赛也相应的结束。而且蝈蝈保证是完整的无多余信息的记录了比赛。

输入数据:

以 point.in 为输入文件,文件中首行只有一个整数 M ,表示蝈蝈记录了多少场比赛的分数。每场比赛用两行记录,第一行是一个整数 N(N<=1000) 表示当前这个记录中有多少个字符,第二行就是具体的 N 个字符表示记录的分数。

输出数据:

相应的内容将输出到 point.out 文件中,对应每一个分数记录,输出相应的每局分数,每局分数都使用两个整数表示,表示两个选手的得分,中间用 ":" 分隔开;每组分数记录间使用一个空行分隔开。如果相应的比赛结果无法预测的时候,以” Unknown “一个单词独占一行表示。

??输入和输出结果数据样例:

Sample Input :

3

23

9 7 3 6 2 4 7 8 3 2 7 9 X 2 2 1 2 1 X 1 X 1 1

25

9 3 8 5 4 8 3 9 8 4 X X X X 2 X X X X 2 8 4 9 2 4

43

7 7 7 7 7 3 4 5 6 7 6 5 4 2 1 3 5 7 9 7 5 3 1 3 0 9 9 3 9 3 2 1 1 1 5 1 5 1 5 1 5 5 1

Sample Output :

21:17

24:22

21:3

Unknown

21:14

20:22

21:23

21:16

21:9

my answer:

表达能力太差,只好从网上找了一段解题分析。和我的想法有一点点区别,当遇到X时,可以在后面插入一个0。比如 X 1或分为X 1和X 0 1两种情况。“插入一个0”比“X和后面一个数合并”实现似乎要麻烦一点,但是我想合并会有一个问题,像X X 1这种情况,是三个数的合并,可能处理不了。可惜只有想法,代码没有实现出来。代码能力不够啊!!!!!!

代码问题主要是:遇到有点情况要分叉,有些情况不分叉,如果统一处理,都进行递归调用,肯定栈溢出。部分递归又写不出来。

但是这道题解空间不是很大,可以不用经典的逆问题求解方式解决,我认为二叉树-回溯算法是比较合适的。

即逐奇偶数字位进行累加,如果没有遇到X,则可以得到唯一答案;

如果遇到X,则分两叉——当作单独的10,或者与后面的数字相加。

采用深度优先的策略,一直搜索到树枝末梢,得到一个解,对这个解进行五局三胜的分析,若通过则接受,不通过则抛弃,然后回溯。

所有树枝遍历之后,根据下面的准则进行判断:

(1)只得到一个可行解,输出;

(2)得到多个可行解,UNKNOWN;

(3)无可行解,UNKONWN;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐