链接:http://poj.org/problem?id=2945

Description

Doubleville, a small town in Texas, was attacked by the aliens. They have abducted some of the residents and taken them to the a spaceship orbiting around earth. After some (quite unpleasant) human experiments, the aliens cloned
the victims, and released multiple copies of them back in Doubleville. So now it might happen that there are 6 identical person named Hugh F. Bumblebee: the original person and its 5 copies. The Federal Bureau of Unauthorized Cloning (FBUC) charged you with
the task of determining how many copies were made from each person. To help you in your task, FBUC have collected a DNA sample from each person. All copies of the same person have the same DNA sequence, and different people have different sequences (we know
that there are no identical twins in the town, this is not an issue).

Input

The input contains several blocks of test cases. Each case begins with a line containing two integers: the number 1 ≤ n ≤ 20000 people, and the length 1 ≤ m ≤ 20 of the DNA sequences. The next n lines contain the DNA sequences:
each line contains a sequence of m characters, where each character is either `A', `C', `G' or `T'.




The input is terminated by a block with n = m = 0 .

Output

For each test case, you have to output n lines, each line containing a single integer. The first line contains the number of different people that were not copied. The second line contains the number of people that were copied
only once (i.e., there are two identical copies for each such person.) The third line contains the number of people that are present in three identical copies, and so on: the i -th line contains the number of persons that are present in i identical copies.
For example, if there are 11 samples, one of them is from John Smith, and all the others are from copies of Joe Foobar, then you have to print `1' in the first andthe tenth lines, and `0' in all the other lines.

Sample Input

9 6
AAAAAA
ACACAC
GTTTTG
ACACAC
GTTTTG
ACACAC
ACACAC
TCCCCC
TCCCCC
0 0

Sample Output

1
2
0
1
0
0
0
0
0

Hint

Huge input file, 'scanf' recommended to avoid TLE.

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <cstdio>
#include <algorithm>
using namespace std;
#define rd(x,y) scanf("%d%d",&x,&y)
int n,m;
struct Trie
{
int cnt;//有多少单词经过该节点
Trie *next[4];
Trie()
{
cnt=0;
for(int i=0;i<4;i++)
next[i]=NULL;
}
}; int coun[20005];
void create(char *s,Trie * root)//将字符串s建立在trie树中
{
Trie *p=root;
int len=strlen(s);
for(int i=0;i<len;i++)
{
int id = -1;
switch(s[i]){
case 'A' : id=0;break;
case 'G' : id=1;break;
case 'C' : id=2;break;
case 'T' : id=3;break;
}
// cout<<id<<' ';
if(p->next[id]==NULL)
{
p->next[id]=new Trie;
p->next[id]->cnt++;
}
else
p->next[id]->cnt++;
p=p->next[id];
}
} void searchTrie(Trie *r,int temp)//查找字符串s是多少单词的前缀。 {
Trie *p=r;
for(int i=0; i<4; i++)
if(p->next[i]!=NULL)
searchTrie(p->next[i],temp+1);
if(temp == m)
coun[(p->cnt)-1]++;
} void release(Trie *r)//释放空间(该题中可以不用释放,也能过)
{
if(r==NULL) return ;
for(int i=0; i<4; i++)
{
if(r->next[i]!=NULL)
release(r->next[i]);
}
// if(r!=&root)
free(r);
}
int main()
{
while(~rd(n,m)&&n!=0&&m!=0)
{
Trie root;
memset(coun,0,sizeof(coun));
char s[25];
getchar();
for(int i = 0;i < n ;i++)
{
gets(s);
create(s,&root);//根据给定的字符串建立字典树
}
searchTrie(&root,0); for(int i = 0 ;i<n;i++)
printf("%d\n",coun[i]);
release(&root);
// root.next[0]=root.next[1]=root.next[2]=root.next[3]=NULL;
}
return 0;
}

Find the Clones(字典树)的更多相关文章

  1. POJ2945(Find the Clones)--字典树,map

    题意:给你n个规定长度的单词,问你其中出现了1次的单词,出现两次的单词...出现n次单词分别有多少个. 当然这题map也能过,但是这里介绍字典树的做法. 首相对于n个单词存入树中,当然建树过程中遇到一 ...

  2. 萌新笔记——用KMP算法与Trie字典树实现屏蔽敏感词(UTF-8编码)

    前几天写好了字典,又刚好重温了KMP算法,恰逢遇到朋友吐槽最近被和谐的词越来越多了,于是突发奇想,想要自己实现一下敏感词屏蔽. 基本敏感词的屏蔽说起来很简单,只要把字符串中的敏感词替换成"* ...

  3. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  4. 字典树+博弈 CF 455B A Lot of Games(接龙游戏)

    题目链接 题意: A和B轮流在建造一个字,每次添加一个字符,要求是给定的n个串的某一个的前缀,不能添加字符的人输掉游戏,输掉的人先手下一轮的游戏.问A先手,经过k轮游戏,最后胜利的人是谁. 思路: 很 ...

  5. 萌新笔记——C++里创建 Trie字典树(中文词典)(一)(插入、遍历)

    萌新做词典第一篇,做得不好,还请指正,谢谢大佬! 写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示 ...

  6. 山东第一届省赛1001 Phone Number(字典树)

    Phone Number Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 We know that if a phone numb ...

  7. 字典树 - A Poet Computer

    The ACM team is working on an AI project called (Eih Eye Three) that allows computers to write poems ...

  8. trie字典树详解及应用

    原文链接    http://www.cnblogs.com/freewater/archive/2012/09/11/2680480.html Trie树详解及其应用   一.知识简介        ...

  9. HDU1671 字典树

    Phone List Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. python之os模块

    #!/usr/bin/env python3# _*_ coding:utf-8 _*_ import os os.getcwd()#os.chdir('path')print(os.curdir)p ...

  2. jquery显示隐藏toggle

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 数据接口管理工具 thx RAP

    RAP是数据接口管理工具.在开发时前端将请求转至RAP,由RAP提供模拟数据:而后端使用RAP测试接口的正确性.这样RAP就成为了开发过程中的强 依赖,进而确保接口文档的实时正确性.RAP采用JSON ...

  4. sqlserver修改某列为行号

    UPDATE t_users  SET t_users.id=u.num1 FROM t_users INNER JOIN (SELECT row_number() over(order by id) ...

  5. 类找不到异常 Caused by: java.lang.NoClassDefFoundError

    错误原因:在部署应用的时候,服务器报错,Caused by: java.lang.ClassNotFoundException: org.quartz.impl.JobDetailImpl,某个类找不 ...

  6. 解决Centos6.5虚拟机上网问题

    起初是为了能通过上网的方式简化g++的安装,故有此篇博文,希望能帮助到有需要的人. 虚拟机环境: 1.Linux系统:Centos6.5 64位 2.ifconfig查看虚拟机ip:竟然没有ip! 3 ...

  7. ARM各种版本号知识以及型号的发展(三星为例)

    1.ARM型号的发展历史 2.单片机.工业上一般使用RTOS(实时操作系统),Linux.Android用在影音娱乐等对实时性要求没那么高的场合: 3.ARM内核版本号和Soc版本号是由ARM确定的, ...

  8. angularjs中$http、$location、$watch及双向数据绑定学习实现简单登陆验证

    使用$http.$location.$watch及双向数据绑定等实现简单的用户登陆验证,记录备忘: 1.$http模拟从后台获取json格式的数据: 2.$watch实时监控数据变化: 3.$loca ...

  9. Redis数据库?-Redis的Virtual Memory介绍(转)

    众所周知,Redis是一个内存数据库,和Memcached类似,所有数据存在内存中,当然,Redis有rdb和appendonlyfile两个落地文件,可以对断电停机等故障下的数据恢复做一些保证.但是 ...

  10. Sublime Text 3关闭自动更新

    Sublime Text 3关闭自动更新 第一步:help->enter license 这有两个: -– BEGIN LICENSE -– Michael Barnes Single User ...