锁定老帖子 主题:有道难题
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-31
sevk 写道 为了不超时,只能分段统计.
每段的连接处也要考滤10 00 01 . 你的图像太有诱惑力了 |
|
返回顶楼 | |
发表时间:2010-06-01
直接用KMP算法不就行了吗?
|
|
返回顶楼 | |
发表时间:2010-06-02
最后修改:2010-06-02
试试C++的,n久不写了,没怎么测试过:
#include <iostream> using namespace std; const unsigned char daos_in_a_byte[2] = { 0x84, //10000100 0x21 //00100001 }; const unsigned char daos_in_a_byte_mask[2] = { 0xFC, //11111100 0x3F //00111111 }; const unsigned short daos_in_a_word[2] = { 0x4008, //00001000_01000000 0x1002 //00000010_00010000 }; const unsigned short daos_in_a_word_mask[2] = { 0xC00F, //00001111_11000000 0xF003 //00000011_11110000 }; int count_in_byte(const unsigned char byte) { return ((byte & daos_in_a_byte_mask[0]) == daos_in_a_byte[0]) || ((byte & daos_in_a_byte_mask[1]) == daos_in_a_byte[1]); } int count_in_word(const unsigned short word) { return ((word & daos_in_a_word_mask[0]) == daos_in_a_word[0]) || ((word & daos_in_a_word_mask[1]) == daos_in_a_word[1]); } int count_dao(const unsigned char* str) { int result = 0; for (int i = 0; *(str + i) != 0; ++i) { result += count_in_byte(*(str + i)); if (*(str + i + 1) != 0) { result += count_in_word(*(const unsigned short * )(str + i)); } } return result; } int main(int argc, char** argv) { char* str1 = "www.youdao.com"; char* str2 = "dict.youdao.com"; cout << count_dao((const unsigned char * )str1) << endl; cout << count_dao((const unsigned char * )str2) << endl; return 0; } |
|
返回顶楼 | |
发表时间:2010-06-02
最后修改:2010-06-02
楼上的结果没问题!
性能上应该也没有什么问题。比Ruby写的方式要快。 |
|
返回顶楼 | |
发表时间:2010-06-03
我觉得算法的题目,最好能讲一下思路,代码不好懂的
我的思路就是 1.先把字符串转成01。。。的串 2.查找100001的串,看它出现的位置,如果 pos%2=0,那么就算1个,这样累加 |
|
返回顶楼 | |
发表时间:2010-06-03
savon_cn 写道 我觉得算法的题目,最好能讲一下思路,代码不好懂的
我的思路就是 1.先把字符串转成01。。。的串 2.查找100001的串,看它出现的位置,如果 pos%2=0,那么就算1个,这样累加 是的,我的也是这样的思路,很直观的一种想法。 |
|
返回顶楼 | |
发表时间:2010-06-07
googya 写道 相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法 用自己的名字替换第一人称是相当伪娘的做法 |
|
返回顶楼 | |
发表时间:2010-06-07
jasongreen 写道 googya 写道 相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法 用自己的名字替换第一人称是相当伪娘的做法 原来如此,怪不得看到别人这么称呼自己的时候觉得怪怪的呢.... |
|
返回顶楼 | |
发表时间:2010-06-07
jasongreen 写道 googya 写道 相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法 用自己的名字替换第一人称是相当伪娘的做法 你不说我还没什么感觉,现在越想越不对劲。 |
|
返回顶楼 | |