首先,我们的思路是用链式的字典树结构,解决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 ;
}

用链式字典树解决POJ2945的更多相关文章

  1. UVa 12333 - Revenge of Fibonacci manweifc(模拟加法竖式 & 字典树)

    题意: 给定n个(n<=40)数字, 求100000个以内有没有前面n个数字符合给定的数字的fibonacci项, 如果有, 给出最小的fibonacci项, 如果没有, 输出-1. 分析: 可 ...

  2. egg项目eslint不识别链式操作符的解决方法

    项目用到链式?.结果eslint一直提示 const permissionHandleArr = positionPermissionHandle.map(item => item.permis ...

  3. HDU4825 Xor Sum(字典树解决最大异或问题)

    Zeus 和 Prometheus 做了一个游戏,Prometheus 给 Zeus 一个集合,集合中包含了N个正整数,随后 Prometheus 将向 Zeus 发起M次询问,每次询问中包含一个正整 ...

  4. hdu杭电1671 / poj3630 字典树

    传送门 题意:输入n串数字 找出是否有存在串的前缀与另一个串相同 如果存在 输出NO否则输出YES 思路:用字典树解决 标记字典树总串的结尾 查找出一个串内部是否有被标记的节点 如果有那么说明存在前缀 ...

  5. POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)

    经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...

  6. poj-2001(字典树)

    题意:给你一堆字符串,我们定义一个字符串可以被缩写成一个字符串(必须是原字符串的前缀),问你每个字符串能辨识的前缀是什么,不能辨识意思是(ab,abc我们缩写成ab): 解题思路:可以用字典树解决,我 ...

  7. HDU6191(01字典树启发式合并)

    Query on A Tree Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 132768/132768 K (Java/Othe ...

  8. 字符串hash与字典树

    title: 字符串hash与字典树 date: 2018-08-01 22:05:29 tags: acm 算法 字符串 概述 这篇主要是关于字符串里的 字符串hash 和 字符串字典树,,两个都是 ...

  9. [luogu3676] 小清新数据结构题 [树链剖分+线段树]

    题面 传送门 思路 本来以为这道题可以LCT维护子树信息直接做的,后来发现这样会因为splay形态改变影响子树权值平方和,是splay本身的局限性导致的 所以只能另辟蹊径 首先,我们考虑询问点都在1的 ...

随机推荐

  1. jQuery的入口函数

    原生的JS的入口函数指的是:window.onload = function(){}: 如下所示: //原生js的入口函数.页面上所有内容加载完毕, 才执行.//不仅要等文本加载完毕, 而且要等图片也 ...

  2. sql到python正则

    import urllib.requestimport re,timeresult=[]for i in range(100):    urls ="http://xxx.com/-1%20 ...

  3. Java编程思想代码环境配置

    官方代码网站已更改 https://github.com/BruceEckel/TIJ4-code 如果导入到IntelliJ中 方法1 在IntelliJ中新建一个Java项目将TIJ4-code- ...

  4. Nginx-HTTP之ngx_http_top_body_filter

    1. ngx_http_top_body_filter 该链表用于构造响应消息的响应正文. 大致有以下模块在该链表中插入了自己的函数: ngx_http_range_filter_module: ng ...

  5. 机器学习之DBSCAN聚类算法

    可以看该博客:https://www.cnblogs.com/aijianiula/p/4339960.html 1.知识点 """ 基本概念: 1.核心对象:某个点的密 ...

  6. nginx.conf 配置 (反向代理,负载均衡,fastdfs model)

    #user nobody;worker_processes 1; #error_log logs/error.log;#error_log logs/error.log notice;#error_l ...

  7. Centos7.4 下cobbler安装及配置

    1.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装,就显 ...

  8. Mybatis 联合查询XML与注解对比

    由于是练习,故只做了感兴趣的一部分测试. 测试类容XML配置转注解方式 实体类为了测试请忽略设计是否合理… User.java @Alias("User")public class ...

  9. 解决DBGridEh遍历记录后不移动当前行位置的方法

    解决DBGridEh遍历记录后不移动当前行位置的方法 在用DBGridEh配合ClientDataSet使用时,需要知道用户选择了哪些记录,可用遍历记录的方法查询选择列是否为真,但在这之后,Clien ...

  10. A股委托类型

    上海交易所于2006年8月7日启用了两种类型的市价委托,分别为:“最优五档即时成交剩余撤销”.“最优五档即时成交剩余转限价”. 深圳证券交易所启用了“对手方最优价格委托”.“本方最优价格委托”.“最优 ...