首先,我们的思路是用链式的字典树结构,解决poj2945这道题

题意是,统计所有的字符串出现的次数,并依次输出各个次数的数量

例如:

input

9 6
AAAAAA
ACACAC
GTTTTG
ACACAC
GTTTTG
ACACAC
ACACAC
TCCCCC
TCCCCC

out

1

2

0

1

0

0

0

0

0

遇到的一些小麻烦 : 之前提交poj爆内存了,就试了一下这个代码,结果还是爆内存,后来发现,我这里不能设置位 Node *next[26],不然铁定爆内存,于是我认真审题,发现这里设置为4就好啦因为只有4个字符需要入树,至于怎么判断下标,我们用一个fun()函数来解决就好了。
具体的思路就是 : 先用find()判断,是否在树里有该个DNA,如果有让,count[i]--,i++,;count[i]++, 如果没有,用T_insert插入,并给count[1]置为1;
最后输出for(i::n)printf("%d\n",count[i]);就可以了。
 #include <iostream>
#include <cstdio>
#pragma comment(linker, "/STACK:1024000000,1024000000")    
#include <cstring>
using namespace std; struct Node
{
Node *next[];     
char val;          
int count;
Node(char val)
{
this->val =val;
count=;
memset(next,NULL,sizeof(next));
}
}; Node *root =new Node('\0');
int *count;
//int *count;
int fun(char s)
{
switch(s)
{
case 'A':return ;break;
case 'C':return ;break;
case 'G':return ;break;
case 'T':return ;break;
}
}
bool T_Find(char *s)
{
int len=strlen(s);
Node *p=root;
for(int i=;i<len;i++)
{ int pos=fun(s[i]);
if(p->next[pos]==NULL)
return false;
p=p->next[pos];
}
count[p->count]--; //如果 程序运行到最后,出现过两次了,那么 p->count 出现过一次的 count[p->count] -- ,也就是给出现一次的次数减一
p->count++; //然后给 p->count 置为出现过2 次
count[p->count]++;
return true;
} void T_insert(char *s)
{
int len=strlen(s);
Node *p=root;
for(int i=;i<len;i++)
{
int pos=fun(s[i]);
if(p->next[pos]==NULL)
{
p->next[pos]= new Node(s[i]);
}
p=p->next[pos];
}
p->count=;
count[p->count]++;
} /*
9 6
AAAAAA
ACACAC
GTTTTG
ACACAC
GTTTTG
ACACAC
ACACAC
TCCCCC
TCCCCC
0 0
*/ int main()
{ int n,m;
while(scanf("%d%d",&n,&m)==&&n&&m)
{
count =new int [n+];
fill(count,count+n+,);
for(int i=;i<n;i++)
{
char *s;
s= new char[m+];
scanf("%s",s);
if(T_Find(s)==false)
{
T_insert(s);
}
}
int i=;
for( i=;i<=n;i++)
{
printf("%d\n",count[i]);
} }
return ;
}

最新文章

  1. jQuery 之 Callback 实现
  2. linux设备驱动归纳总结(四):3.抢占和上下文切换【转】
  3. css杂记
  4. Python计算文件MD5值
  5. Excle快速输入√与&#215;
  6. csu 1303 Decimal (数论题)
  7. cygwin远程操作linux
  8. hadoop之wordCount程序理解
  9. android studio上代码编译调试中遇到的一些异常记录
  10. 14.2.3 InnoDB Redo Log
  11. 【网络爬虫入门02】HTTP客户端库Requests的基本原理与基础应用
  12. 如何通过Mock API提高APP开发效率?
  13. 第一个简单的maven项目
  14. [MySQL] timestamp和datetime的区别和大坑
  15. spring cloud实战与思考(三) 微服务之间通过fiegn上传一组文件(下)
  16. SpringBoot之普通类获取Spring容器中的bean
  17. IDEA解决crtl+space与搜狗输入法冲突
  18. Django 自定义模板语法
  19. Android开发导出apk报错:Unable to build: the file dx.jar was not loaded from the SDK folder
  20. iOS Runtime 实操练习

热门文章

  1. python3版 爬虫了解
  2. centos7下面ruby的升级
  3. chrome中如何查看元素的hover事件
  4. CodeIgniter启用缓存和清除缓存的方法
  5. Android-Glide使用
  6. leetcode探索高级算法
  7. redis 的使用 及 配置文件解读
  8. 信息学竞赛一本通提高版AC题解—例题1.1活动安排
  9. Vue UI组件 开发框架 服务端 辅助工具 应用实例 Demo示例
  10. 【译】优雅的停止docker容器