codejam 2008 practice problems

来源:互联网 发布:网络教育公共服务体系 编辑:程序博客网 时间:2024/06/05 02:10

今年毕业,5月的codejam希望能够取得好点的成绩。


四个题https://code.google.com/codejam/contest/32003/dashboard


A Alien Numbers,进制转换,没啥好说的。

B Always Turn Left,走迷宫的模拟。如果往前走,当前位置左边有墙,往右走就是左边前边有墙。

记得迷宫的边界是有墙的,有的地方四面都没墙,上下,左右两块是共用一个墙的。


写这个的时候,本来打算用一个函数处理正着走和倒着走。但一懒,复制了一遍代码,没写成一个函数。结果,好几次改了一处,没改另一处。wa了好久。这样比赛的时候是肯定过不了的。


C Egg Drop,判断哪层鸡蛋摔碎。f(d,b)是算d,b已知时,最大的f的。有一个关系:

f(d,b)=f(d-1,b-1)+1+f(d-1.b)。假设第一次测试第x层,如果鸡蛋碎了,就用剩下的测试x下面的,这是第一项。如果没碎,就用剩下的测试x上面的,这是第三项。x自己也是1层。

算的时候,不能全部缓存,缓存d和b同事小于100的就行。

f(d,2)=(1+d)*d/2;

f(d,3)=d*(d-1)*(d+1)/6+d;

if(b==3&&d>4000)return -1;

if(b>32&&d>32)return -1;

if(b==d)return (1LL<<b)-1;


有了f(d,b)函数之后,二分查找d(f,b)和b(f,d)就行了。

D Shopping Plan,这个是看别人写的东西才做出来的。

是个动规,状态是 当前在那个位置×当前已经有的商品

需要一个a[1<<15][51]矩阵来缓存。详细递推http://stackoverflow.com/questions/4735387/can-someone-explain-one-of-the-algorithms-that-solves-this-google-code-jam-probl


发现用我笔记本跑大case 340s,用个快一些的电脑114s。看了比赛的时候必须用快的电脑了。

0 0