论坛首页 编程语言技术论坛

有道难题

浏览 9067 次
锁定老帖子 主题:有道难题
精华帖 (1) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-31  
sevk 写道
为了不超时,只能分段统计.
每段的连接处也要考滤10 00 01 .

  你的图像太有诱惑力了
0 请登录后投票
   发表时间:2010-06-01  
直接用KMP算法不就行了吗?
0 请登录后投票
   发表时间: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;
}

0 请登录后投票
   发表时间:2010-06-02   最后修改:2010-06-02
楼上的结果没问题!
性能上应该也没有什么问题。比Ruby写的方式要快。
0 请登录后投票
   发表时间:2010-06-03  
我觉得算法的题目,最好能讲一下思路,代码不好懂的
我的思路就是
  1.先把字符串转成01。。。的串
  2.查找100001的串,看它出现的位置,如果 pos%2=0,那么就算1个,这样累加
0 请登录后投票
   发表时间:2010-06-03  
savon_cn 写道
我觉得算法的题目,最好能讲一下思路,代码不好懂的
我的思路就是
  1.先把字符串转成01。。。的串
  2.查找100001的串,看它出现的位置,如果 pos%2=0,那么就算1个,这样累加



是的,我的也是这样的思路,很直观的一种想法。
0 请登录后投票
   发表时间:2010-06-07  
googya 写道
相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法


用自己的名字替换第一人称是相当伪娘的做法
0 请登录后投票
   发表时间:2010-06-07  
jasongreen 写道
googya 写道
相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法


用自己的名字替换第一人称是相当伪娘的做法

原来如此,怪不得看到别人这么称呼自己的时候觉得怪怪的呢....
0 请登录后投票
   发表时间:2010-06-07  
jasongreen 写道
googya 写道
相比之下,googya的代码显得相当的笨拙!
部分原因是不熟悉unpack这个方法!用的是,最直接、最原始的想法


用自己的名字替换第一人称是相当伪娘的做法



你不说我还没什么感觉,现在越想越不对劲。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics