Find the Clones
Time Limit: 5000MS   Memory Limit: 65536K
Total Submissions: 6365   Accepted: 2375

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
题目大意:输入两个数m,n分别代表基因片段的数目和每个基因片段的长度,输出结果为n个数,第i个数代表出现次数为i-1的基因片段的数量。
时间限制是5000MS,时间特别宽松,用map都能过。 map,sort,AC自动机,Trie树都可以过。
map方法 2900+MS;map法的优点:编程毫无难度,思路及其简单,能在最短的时间内AC这题,在比赛上用这种方法的优势最大。当然如果是卡时间的话,我们考虑用sort qsort。
数据结构题的特点:代码量大,编程复杂度高,很锻炼代码能力和编程思想。
在考场上最好的算法就是能在最少的时间内得到ac.
time:2900+ms;
 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <iomanip>
#include <cstdlib>
using namespace std;
const int INF=0x5fffffff;
const int MS=;
const double EXP=1e-;
int num[MS];
char str[MS][];
struct cmp
{
bool operator()(const char *a,const char *b)const
{
return strcmp(a,b)<;
}
};
map<char *,int,cmp> mp;
int main()
{
int n,m;
char *s;
while(scanf("%d%d",&n,&m)==&&(n+m))
{
mp.clear();
int j=;
for(int i=;i<n;i++)
{
s=str[j++];//需要不同的地址
scanf("%s",s);
mp[s]++;
}
memset(num,,sizeof(num));
for(map<char*,int,cmp>::iterator it=mp.begin();it!=mp.end();it++)
{
num[it->second-]++;
}
for(int i=;i<n;i++)
{
printf("%d\n",num[i]);
}
} return ;
}

Trie 树

time:204ms

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <iomanip>
#include <cstdlib>
using namespace std;
const int INF=0x5fffffff;
const int MS=;
const double EXP=1e-; struct node
{
// int id;
//bool have;
int n;
node * next[];
}nodes[MS]; //注意这个大小 尽量大一点,避免访问非法内存 node *root;
int cnt;
int t[];
int num[MS/]; node * add_node(int c)
{
node *p=&nodes[c];
for(int i=;i<;i++)
p->next[i]=NULL;
// p->have=false;
p->n=;
return p;
} void insert(char *str)
{
node *p=root,*q;
int len=strlen(str);
for(int i=;i<len;i++)
{
int id=t[str[i]-'A'];
if(p->next[id]==NULL)
{
p->next[id]=add_node(cnt);
cnt++;
}
p=p->next[id];
}
p->n++;
} int main()
{
int n,m,i;
t[]=;
t[]=;
t[]=;
t[]=;
char str[];
while(scanf("%d%d",&n,&m)==&&(n+m))
{
cnt=;
memset(num,,sizeof(num));
root=add_node(cnt);
cnt++;
for(i=;i<n;i++)
{
scanf("%s",str);
insert(str);
}
int sum=;
for(i=;i<=cnt;i++)
{
if(nodes[i].n)
{
num[nodes[i].n-]++;
}
}
for(i=;i<n;i++)
printf("%d\n",num[i]);
}
return ;
}

Find the Clones的更多相关文章

  1. Apache Tomcat 9 Installation on Linux (RHEL and clones)

    Apache Tomcat 9 is not available from the standard RHEL distributions, so this article provides info ...

  2. XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures

    题目:Problem D. Clones and TreasuresInput file: standard inputOutput file: standard outputTime limit: ...

  3. poj2945 Find the Clones

    Find the Clones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8490   Accepted: 3210 D ...

  4. 【Software Clone】2014-IEEE-Towards a Big Data Curated Benchmark of Inter-Project Code Clones

    Abstract 大数据的克隆检测和搜索算法已经作为嵌入在应用中的一部分. 本文推出一个代码检测基准.包含一些已知的真假克隆代码.其中包括600万条真克隆(包含type-1,type-2,type-3 ...

  5. Find the Clones(字典树)

    链接:http://poj.org/problem?id=2945 Description Doubleville, a small town in Texas, was attacked by th ...

  6. poj 2945 Find the Clones

    https://vjudge.net/problem/POJ-2945 题意: 给出n个长度相同的DNA序列,如果一个DNA序列出现过两次,那么就有说明它被复制了一次.问被复制0次,1次,2次--n- ...

  7. POJ2945:Find the Clones——题解

    http://poj.org/problem?id=2945 还是trie树……对于结束标记累加并且开个数组记录一下即可. #include<cstdio> #include<cst ...

  8. 【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures

    给你一行房间,有的是隐身药水,有的是守卫,有的是金币. 你可以任选起点,向右走,每经过一个药水或金币就拿走,每经过一个守卫必须消耗1个药水,问你最多得几个金币. 药水看成左括号,守卫看成右括号, 就从 ...

  9. POJ2945 Find the Clones trie树

    建一颗$trie$树(当然你哈希也资瓷),边插边更新,看看搜到最底时有多少个字符串,然后更新. #include<cstdio> #include<iostream> #inc ...

随机推荐

  1. windows下揪出java程序占用cpu很高的线程 并找到问题代码 死循环线程代码

    我的一个java程序偶尔会出现cpu占用很高的情况 一直不知道什么原因 今天终于抽时间解决了 系统是win2003 jvisualvm 和 jconsole貌似都只能看到总共占用的cpu 看不到每个线 ...

  2. Leveldb Advanced

    [Slice] The return value of the it->key() and it->value() is a simple structure that contains ...

  3. 2013年度Python Git工具

    Pycoders周刊根据读者对周刊文章的点击数据,评选出了2013年最受关注的和Git相关的Python工具. git-workflow (github.com) 可视化你的 git 工作流程的工具, ...

  4. class int

    class int(object): """ int(x=0) -> integer int(x, base=10) -> integer Convert a ...

  5. 【LeetCode】 Subsets

    Given a set of distinct integers, S, return all possible subsets. Note: Elements in a subset must be ...

  6. http://docwiki.embarcadero.com/RADStudio/XE7/en/Delphi_Data_Types

    http://docwiki.embarcadero.com/RADStudio/XE7/en/Delphi_Data_Types

  7. 配置IIS服务器,.apk文件下载

    iis中支持下载apk文件, 发布的网站上右键->属性->HTTP头->下方有个按钮叫[MIME类型]->添加:两个栏, 扩展名填写: .apk MIME类型填写: 扩展名为 ...

  8. UI:关于RGB与16进制颜色值的转换

    IOS基本图形绘制 参考 取色对照表 参照 页面背景改为   #5CACEE   的颜色.有两个方法 方法一: 加两个宏 #define UIColorFromHexWithAlpha(hexValu ...

  9. InnoDB存储引擎

    [InnoDB和MyISAM区别][ http://jeck2046.blog.51cto.com/184478/90499] InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型, ...

  10. ASP.NET基础之HttpModule 、HttpContext、 HttpHandler

    http://www.cnblogs.com/wujy/p/3261141.html http://www.cnblogs.com/wujy/p/3264475.html http://www.cnb ...