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

  1. 9 6
  2. AAAAAA
  3. ACACAC
  4. GTTTTG
  5. ACACAC
  6. GTTTTG
  7. ACACAC
  8. ACACAC
  9. TCCCCC
  10. TCCCCC
  11. 0 0

Sample Output

  1. 1
  2. 2
  3. 0
  4. 1
  5. 0
  6. 0
  7. 0
  8. 0
  9. 0
    题目大意:输入两个数m,n分别代表基因片段的数目和每个基因片段的长度,输出结果为n个数,第i个数代表出现次数为i-1的基因片段的数量。
    时间限制是5000MS,时间特别宽松,用map都能过。 map,sortAC自动机,Trie树都可以过。
    map方法 2900+MSmap法的优点:编程毫无难度,思路及其简单,能在最短的时间内AC这题,在比赛上用这种方法的优势最大。当然如果是卡时间的话,我们考虑用sort qsort
    数据结构题的特点:代码量大,编程复杂度高,很锻炼代码能力和编程思想。
    在考场上最好的算法就是能在最少的时间内得到ac.
    time:2900+ms;
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. #include <iomanip>
  13. #include <cstdlib>
  14. using namespace std;
  15. const int INF=0x5fffffff;
  16. const int MS=;
  17. const double EXP=1e-;
  18. int num[MS];
  19. char str[MS][];
  20. struct cmp
  21. {
  22. bool operator()(const char *a,const char *b)const
  23. {
  24. return strcmp(a,b)<;
  25. }
  26. };
  27. map<char *,int,cmp> mp;
  28. int main()
  29. {
  30. int n,m;
  31. char *s;
  32. while(scanf("%d%d",&n,&m)==&&(n+m))
  33. {
  34. mp.clear();
  35. int j=;
  36. for(int i=;i<n;i++)
  37. {
  38. s=str[j++];//需要不同的地址
  39. scanf("%s",s);
  40. mp[s]++;
  41. }
  42. memset(num,,sizeof(num));
  43. for(map<char*,int,cmp>::iterator it=mp.begin();it!=mp.end();it++)
  44. {
  45. num[it->second-]++;
  46. }
  47. for(int i=;i<n;i++)
  48. {
  49. printf("%d\n",num[i]);
  50. }
  51. }
  52.  
  53. return ;
  54. }

Trie 树

time:204ms

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cmath>
  5. #include <algorithm>
  6. #include <string>
  7. #include <vector>
  8. #include <stack>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. #include <iomanip>
  13. #include <cstdlib>
  14. using namespace std;
  15. const int INF=0x5fffffff;
  16. const int MS=;
  17. const double EXP=1e-;
  18.  
  19. struct node
  20. {
  21. // int id;
  22. //bool have;
  23. int n;
  24. node * next[];
  25. }nodes[MS]; //注意这个大小 尽量大一点,避免访问非法内存
  26.  
  27. node *root;
  28. int cnt;
  29. int t[];
  30. int num[MS/];
  31.  
  32. node * add_node(int c)
  33. {
  34. node *p=&nodes[c];
  35. for(int i=;i<;i++)
  36. p->next[i]=NULL;
  37. // p->have=false;
  38. p->n=;
  39. return p;
  40. }
  41.  
  42. void insert(char *str)
  43. {
  44. node *p=root,*q;
  45. int len=strlen(str);
  46. for(int i=;i<len;i++)
  47. {
  48. int id=t[str[i]-'A'];
  49. if(p->next[id]==NULL)
  50. {
  51. p->next[id]=add_node(cnt);
  52. cnt++;
  53. }
  54. p=p->next[id];
  55. }
  56. p->n++;
  57. }
  58.  
  59. int main()
  60. {
  61. int n,m,i;
  62. t[]=;
  63. t[]=;
  64. t[]=;
  65. t[]=;
  66. char str[];
  67. while(scanf("%d%d",&n,&m)==&&(n+m))
  68. {
  69. cnt=;
  70. memset(num,,sizeof(num));
  71. root=add_node(cnt);
  72. cnt++;
  73. for(i=;i<n;i++)
  74. {
  75. scanf("%s",str);
  76. insert(str);
  77. }
  78. int sum=;
  79. for(i=;i<=cnt;i++)
  80. {
  81. if(nodes[i].n)
  82. {
  83. num[nodes[i].n-]++;
  84. }
  85. }
  86. for(i=;i<n;i++)
  87. printf("%d\n",num[i]);
  88. }
  89. return ;
  90. }

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. Unity3D Persistent Storage

    [Unity3D Persistent Storage] 1.PlayerPrefs类以键值对的形式来提供PersistentStorage能力.提供小额存储能力.(做成sst可以提供大规模数据存储) ...

  2. C++11能用智能指针

    [C++11能用智能指针] shared_ptr 是一引用计数 (reference-counted) 指针,其行为与一般 C++ 指针即为相似.在 TR1 的实现中,缺少了一些一般指针所拥有的特色, ...

  3. IMAQdx和IMAQ

    NI-IMAQdx driver software gives you the ability to acquire images with IEEE 1394 and GigE Vision cam ...

  4. whereis 命令

    whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...

  5. Swift-CALayer十则示例

    作者:Scott Gardner   译者:TurtleFromMars原文:CALayer in iOS with Swift: 10 Examples 如你所知,我们在iOS应用中看到的都是视图( ...

  6. Light oj 1100 - Again Array Queries (鸽巢原理+暴力)

    题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间 ...

  7. mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法

    Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 经过了SimilarityJob的计算共生矩阵后,就可以开始下面一个过程了,这个过程主要是共生矩阵的乘法 ...

  8. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.5 Delete删除用户]

    3.5 Delete删除用户 删除也是通过ObjectID获得对象进行删除 [Authorize] public async Task<ActionResult> Delete(strin ...

  9. 在XAF(ASP.NET)中以ListEditor的形式调用百度地图API

    因为项目需要,在系统中使用地图显示设备的地理位置.考虑过ArgGIS,Bing和Baidu地图.本来想用ArgGIS,看教程嫌麻烦.所以还是用Web地图吧.Bing的话还要申请个key,没心情.百度地 ...

  10. C# 绘制统计图(柱状图, 折线图, 扇形图)

    统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...