伴随着Round 1C的落幕,我只能遗憾的说,今年的GCJ比赛,我到此为止了。
今年是我第一年参加GCJ的比赛,战绩:资格赛70分,Rank:2676,Round 1A:没有参加。Round 1B:20分,Rank:1977,Round 1C:40分,Rank:1059(这次是我最接近赛点的成绩了,现在想来还是有很多遗憾的)。
Round 1A:北京时间2011年5月21日早上9点,由于实验室集体出去春游,错过了Google Code jam Round 1A的机会,回来已经是晚上8点多了,发现Round 1A前1000名的只要过了第一道题就可以了。于是匆匆看了第一题。
Round 1A FreeCell Statistics 第一题:题目大意为,有个人每天玩游戏,最多可以玩N把,然后已经玩了D回,赢得概率是Pd,统计到目前为止,可以玩的所有游戏回数中赢的概率为Pg。但是它忘了今天玩了多少回,总括玩了多少回G。给定三个数 N,Pd, Pg,问这个组合是否是有效的。
分析:因为Pd始终是整数,而且是可以整除的,因此一个条件是今天赢得次数/D = Pd / 100. 而D < N,也就是能否在1-N之间找到一个数D,使得 Pd / 100 * D 刚好为一个整数,相当于D * gcd(pd, 100)/ 100为整数。gcd表示最大公约数。另D = 100 / gcd(pd,100)就可以求得最小的D了。对于任意的Pg都可以构造出来,但是有两个特殊值 0和100,当pg=0时,pd = 0;pg=100时,pd = 100;
因此代码如下:
由于Round 1B的时间是:北京时间2011年5月22日凌晨0点。就没有接着往下做了,等有空的时候再把剩下几道题补上吧。
Round 1B:北京时间2011年5月22日凌晨0点。
第一题:RPI。题目比较晦涩难懂,具体就是根据公式 RPI = 0.25 * WP + 0.50 * OWP + 0.25 * OOWP。WP,代表本队的胜率,OWP:代表跟本队比过赛的对手队伍,排除这场比赛以后的胜率和的平均(注意是比过赛的)。OOWP:是非本队队伍对OWP的一个均值。
所以题目读懂以后,也就不难了。
第二题:Revenge of the Hot Dogs
题目大意,有一条无限长的东西走向大街,上面有很多热狗摊子,然后为了避免他们互相争抢生意,他们之间的间距至少为D,已知热狗摊子移动速度为1米每秒,问如何移动这些摊子,使得他们的移动时间最短。
这道题没有过。我觉得我的想法是对的,可是运行结果在Case44和Case49出错了,其他的测试用例都通过了。等有时间我过了它,在好好解释吧。错误代码如下:
第三题: House of Kittens
没时间做了,下次再一起说吧。
Round 1C时间:2011年5月22日下午5点开始。感觉第三轮的题目比前两轮都要简单,也是我最好的一次成绩,可惜还是没有过。
Square Tiles:用红色2*2方块替换蓝色的方块,因为红色的方块不能重叠,所以很简单。只需要遍历一遍,看map[i][j] == '#'&&map[i+1][j] == '#' && map[i][j+1] == '#' && map[i+1][j+1] == '#',则替换,如果不是的话,则不能完全替换。
代码如下:
Space Emergency:题目很长,很难懂。大意是飞船从0-N进行逃生,速度为0.5,然后途中可以建设L座加速器,加速器建设完成以后可以立即对飞艇进行加速,速度变成1,然后0-N的距离为a1,a2,a3,……ac的循环。
当时这道题把我看懵了,其实可以用简单的贪心算法就可以过的。但是我没有时间去想了(感觉当时太着急了),看到小数据量的L的取值只有0 1 2三种情况,于是对三种情况做了一下简单的遍历。
贪心算法是,在飞船加速器建设起来之前,通过的所有路径都不能进行加速,直到飞船加速器建设起来以后,选取最长的L个路径进行加速。题目太长了,看完就已经用了20分钟了(我英语实在是太烂了,这次没有通过第一轮,英语的掣肘也占到了一大部分比重)。
小数据量代码如下:
Perfect Harmony:题目也是很难懂啊(我英语太烂了),其实就是在L到H之间找一个数Y,使得Y能被其他音阶整除,或者可以整除其他音阶。
小数据量很好过,遍历L到H的所有整数吧。代码如下:
所有题目的完整解法,等我全部做完以后,在写吧。得好好想想,自己如何提高了。
最后附上本次排名赛中,我的成绩,就差8分钟。自己葬送了自己啊!