| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 862 人关注过本帖, 1 人收藏
标题:关于超级病毒的问题,ACM的编程题目~!
只看楼主 加入收藏
lcddhr
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2011-5-18
结帖率:100%
收藏(1)
已结贴  问题点数:15 回复次数:8 
关于超级病毒的问题,ACM的编程题目~!
描述
在ACM训练基地最引人注目的一台计算机是一台具有高度人工智能的超级生物计算机。和其他所有计算机不同,这台计算机拥有和人类一样的DNA结构。由于具有高度的人工智能,各位训练队员们都早已把它当成是训练队里不可缺少的一员。


有一天,它们发现这台计算机生病了……


生病以后,这台计算机变得很虚弱,不和我们打招呼了,也不能帮我们想算法题了。队员们都很难过,他们都想帮帮这位好朋友。


经过仔细的检查,它们发现这台计算机感染了一种病毒。和医学中的病毒一样,这种超级病毒侵入计算机运算单元内的细胞,将其感染。于是,正常细胞中的DNA被病毒更改为新的序列。导致细胞机能的变异。


经过仔细比对,训练队员们已经找到了可疑的病毒特征序列,即,如果细胞的DNA序列中包含这种序列,那么该细胞就很可能被感染。


例如,病毒特征代码为ATAA,则如果DNA序列中如果有ATCATAATCATAC这样一段,则细胞就很可能受到感染。


现在,队员们将为生病计算机进行彻底的检查,他们将给出计算机完整的DNA序列(和生物学中的DNA一样,计算机的DNA序列也可以表示为字母A,T,C,G组成的序列),你的任务是,判定该DNA序列中出现过几次病毒特征序列。


注意:其中病毒特征序列在待测DNA序列中重叠出现必须按多次计算。


例如: AATTAATTAA在AATTAATTAATTAA中出现两次。

输入
输入包括多组测试数据,第一行有一个正整数N表示数据数量。
以下为N组测试数据。
每组测试数据由两行,每一行都是由字母A、T、C、G组成的字符串。第一行为病毒特征代码(长度不超过10000个字符)。第二行为待测DNA序列,此序列长度较长(长度不超过1000000个字符)。


输出
对于每一组测试数据,输出一个整数表示答案,为在待测DNA序列中出现病毒特征代码的次数。

样例输入
1
AATTAATTAA
AATTAATTAATTAA
样例输出
2

///长度不超过1000000  这该怎么定义呀  我的编译器老是报错~~~   
我的代码:#include<stdio.h>
#include<string.h>
#include<malloc.h>
void main()
{
 char *s1,*s2;
 int num=0,num_s1,num_s2;
 int i,j,k,flag,N;
 s1=(char *)malloc(sizeof(char)*10000);
 s2=(char *)malloc(sizeof(char)*1000000);


 gets(s1);
 gets(s2);

 num_s1=strlen(s1);
 num_s2=strlen(s2);

 for(j=0;j<num_s2-num_s1+1;j++)
 {
  flag=1,k=j;
  for(i=0;i<num_s1;i++)
  {
   if(s2[k]!=s1[i])
   {
    flag=0;
    break;
   }
   else
   k++;
  }
   if(flag)
    num++;
 }

 printf("%d",num);




 }
//编辑一组数据的话还行  两组以上数据我就不会了 请问要怎么修改呢?

下面是OJ的判断网址:http://www.

[ 本帖最后由 lcddhr 于 2011-6-2 12:38 编辑 ]
搜索更多相关主题的帖子: 人工智能 计算机 超级病毒 好朋友 基地 
2011-06-02 11:27
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:5 
程序代码:
#include <stdio.h>
#include <string.h>

unsigned matching(char * str1, char * str2) {
    unsigned i, j, k, count = 0;
    for(i = 0; i < (strlen(str2) - strlen(str1) + 1); i++) {
        k = 0;
        for(j = 0; j < strlen(str1); j++) {
            if(str1[j] == str2[i + j]) {
                k++;
            }
        }
        if(k == strlen(str1)) {
            count++;
        }
    }
    return count;
}

int main(void) {
    char vsc[100001], dct[1000001];
    unsigned n;
    printf("Enter n: ");
    scanf("%u", &n);
    while(n-- > 0) {
        scanf("%s%s", vsc, dct);
        printf("%u\n\n", matching(vsc, dct));
    }
    return 0;
}
图片附件: 游客没有浏览图片的权限,请 登录注册

喜欢美式题。


My life is brilliant
2011-06-02 12:50
lcddhr
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2011-5-18
收藏
得分:0 
回复 2楼 lz1091914999
你OJ判断过了么?
2011-06-02 13:13
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
通用的匹配函数,LZ你可以去试试啊。还有 'OJ'是什么?

My life is brilliant
2011-06-02 13:16
lcddhr
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2011-5-18
收藏
得分:0 
回复 4楼 lz1091914999
你的输入方式和题目要求的不对呀,题目的要求是先输入要测试几组数据   然后输入数据     最后连结果一起输出   而你的却是输入一组数据然后就得出一个结果  OJ不能通过呀~~    这是提交代码的OJ网址 你可以试试http://www.
2011-06-02 18:44
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
OJ对输入和输出的要求非常精确,楼上肯定没玩过,否则也不会加个Enter n:的输入提示了。
这里我想解释一部分朋友对scanf printf这两个函数的误会。大部分情况下我们用scanf从键盘接收数据,用printf向屏幕输出数据,所以很多人认为它们只能做这样的事。
换一个精确一点的描述应该是scanf从标准输入流中读入数据,printf向标准输出流输出数据。也就是说通过重定向流后它们可以从别的流中输入输出,比如文件,或者另一个程序。事实上OJ这个裁判程序就是这么做的。
另外,建议用 fgets 替代 gets函数。gets不对缓存区做边界检查。

重剑无锋,大巧不工
2011-06-03 11:08
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:5 
回复 4楼 lz1091914999
不是吧,oj的输入输出是分开的,不存在你说的问题····
2011-06-03 12:13
Toomj
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:257
专家分:1826
注 册:2011-5-17
收藏
得分:0 
错了,是5楼
2011-06-03 12:13
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
哦,我去试了试,结果速度慢了5ms,呵呵。

My life is brilliant
2011-06-03 13:06
快速回复:关于超级病毒的问题,ACM的编程题目~!
数据加载中...
 
   



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

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