首先,lazy-cat 的用法为: (lazy-cat & colls)
(lazy-cat xs ys) === (concat (lazy-seq xs) (lazy-seq ys))
在你的那句代码中,
xs 是 [0N 1N]
,这是 head-fibo 头两个元素
ys 是 (map + head-fibo (rest head-fibo))
其中 head-fibo 是
(lazy-seq [0N, 1N, ....]
(rest head-fibo) 是
(lazy-seq [1N, ....]
map + 操作把两个序列对应元素相加合成一个序列
不断的计算,可以得到
(map + head-fibo (rest head-fibo))
等于
(lazy-seq [1N, 2N, 3N, 5N, ...])
不着急实习。学点东西也好,弄一弄算法竞赛,要不去实验室坑一坑也行。 当酒店服务员这种没必要去。这种事就不要在读大学的时候浪费时间来做,没什么收获。
顶一个
这种情况下,用 shingling 算法吧,简单容易实现。
#4 楼 @linktoming 每个数是一个 2 进制编码,1000 个数总共需要十位编码。方案如下: 对于数字 i,对与 i 的二进制编码对应的鸡喂第 i 瓶药。比如对于数字 11,二进制位是(1011),于是把第 11 瓶药给第 1,2,4 只鸡吃。 最后判断方法如下: 假设第 i 瓶是毒药,那么 i 的二进制编码对应的鸡会死掉,比如是第 11 瓶是毒药,那么第 1,2,4 只鸡会死,其他鸡对没事。通过看那些鸡死掉,合成 2 进制编码,得到结果。
+1
#7 楼 @redvoilin 这是个算法竞赛的网站,他们的评测系统编译环境就是这么安装的。
#2 楼 @tankerwng 随便的一种其他语言都能比它快几个数量级,这就是不应该是忽视的问题了。
学函数式编程就能学会了
这个是个动态规划问题,先用动态规划预处理 i 个数字和为 j 的排列方案数 dp[i][j]. 递推方程为 dp[i][j] = sum { dp[i-1][j-k]} , (0 <= k <= 9} . 长度为 n 的 lucky number 方案总数 ans = sum { dp[half][s] * dp[n-half][s]} ,其中 half = n/2.
c++ 代码见:http://ideone.com/intocY
之前一直用 C++ 做 acm 题,所以就写 c++ 了。。
抢楼
#2 楼 @wujian_hit 。。。我是学长,学弟加油
赞一个。学长哪个实验室的?
第二份工作看着不错,可惜我签了公司了,要不然真的想试试
其实考语法我觉得真的不好,我个人用不熟悉的语言写代码的时候,都是先想思路,碰到不熟悉的语法再 google。我觉得还是考算法比较好
#1 楼 @fresh_fish 会不会,冬天过后,楼主就消失了?
哈哈,报个名
好像很容易买到。
恩,现在这个事解决了。
#2 楼 @JeskTop #4 楼 @diudiutang 保研的话,三方就自动和学校签了。有的企业没有三方就不收人。
额。看不懂你说的什么 ==!,需要几次的话 不就是 (5 + 3)/4 吗?正常 a 个东西每次拿 b 个,就需要 (a + b - 1)/b 次循环。
我感觉哈尔滨的话,肯定的,就算要下,下的也是雪。
扩展 kmp 算法。google 一下就知道了,复杂度 O(length).