标题:谁帮帮我 实在做不出来了
只看楼主
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
刚看错题目了 只有一个病毒序列啊 那不用AC自动机
2011-07-09 22:41
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
本人菜鸟   这道题做了一下午  惭愧  

                                         
===========深入<----------------->浅出============
2011-07-09 23:16
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
回复 12楼 laoyang103
表示我也不会做 TL了- -  

本人是一只永远变不了菜鸟的小鸡
2011-07-09 23:43
BlueGuy
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:29
帖 子:4476
专家分:4055
注 册:2009-4-18
得分:0 
以下是引用草狼在2011-7-9 23:43:10的发言:

表示我也不会做 TL了- -   
 
本人是一只永远变不了菜鸟的小鸡
骄傲了吧?! 少了一个蛋,

我就是真命天子,顺我者生,逆我者死!
2011-07-09 23:47
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
那题目描述太恶心了

题目说
第一行为病毒特征代码(长度不超过10000个字符)。

可是数组要开100000 才能过- - 我就在这纠结了很久 恶心的题目
2011-07-09 23:59
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
得分:0 
题目的要求有:
1.时间限制:1000 ms  |  内存限制:65536 KB
2.第一行为病毒特征代码(长度不超过10000个字符)。第二行为待测DNA序列,此序列长度较长(长度不超过1000000个字符)。
时间内存都有限制,长度这么长,有难度!!!
要是没有时间内存的限制,应该没问题。
2011-07-10 07:16
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
对于这种题暴力求解一定超时   

                                         
===========深入<----------------->浅出============
2011-07-10 07:57
ouyangouyang
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:273
专家分:579
注 册:2009-10-8
得分:0 
你不是写出来了吗,前面那个代码是对的啊
还有时间怎么看的啊

多少恨, 昨夜梦魂中。 还似旧时游上苑, 车如流水马如龙; 花月正春风!
2011-07-10 09:38
草狼
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:2
帖 子:577
专家分:1040
注 册:2010-4-6
得分:0 
/66MS解法
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
 
char str[1000001];
char str1[20000];
int main(){
    int n,i,j,next[20000],len1,len2,cont;
    scanf("%d",&n);
    while(n--){
        scanf("%s",str1);
        scanf("%s",str);
    //kmp
        i=0;
        j=-1;
        len1=strlen(str1);
        len2=strlen(str);
        next[0]=-1;
        while(i<len1){
        if(j==-1 || str1[i]==str1[j]){
            ++i;
            ++j;
            next[i]=j;
        }else j=next[j];
    }
   
    i=0;
    j=0;
    cont=0;
    while(i<len2){
        if(j==-1 || str1[j]==str[i] ){
            ++i;
            ++j;
        }else j=next[j];
        if(j>=len1){
            cont++;
            i-=next[len1];//根据病毒串最后跟自己匹配的长度 主串后退相应的长度
            j=0;
        }
    }
    printf("%d\n",cont);
    }
return 0;
}

还有 为什么我上面的代码不能用 gun c提交啊郁闷- -
还有 老杨那代码 如果给组 病毒串长10000 主串长1000000的就超时了吧  时间复杂度要10000*999000吧
收到的鲜花
  • laoyang1032011-07-10 11:48 送鲜花  5朵   附言:我很赞同
2011-07-10 10:21
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
得分:0 
回复 19楼 草狼
恩  效率确实能不相比  楼上的代码相当牛  老杨学习了

谢过  一直以为KMP只能做匹配 没想到可以这样用 看来我对KMP还是理解的不深

我会再好好看看的

                                         
===========深入<----------------->浅出============
2011-07-10 11:50



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-345097-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.417891 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved