Find the Clones
Time Limit: 5000MS | Memory Limit: 65536K | |
Total Submissions: 6365 | Accepted: 2375 |
Description
Input
The input is terminated by a block with n = m = 0 .
Output
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的更多相关文章
- 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 ...
- 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: ...
- poj2945 Find the Clones
Find the Clones Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 8490 Accepted: 3210 D ...
- 【Software Clone】2014-IEEE-Towards a Big Data Curated Benchmark of Inter-Project Code Clones
Abstract 大数据的克隆检测和搜索算法已经作为嵌入在应用中的一部分. 本文推出一个代码检测基准.包含一些已知的真假克隆代码.其中包括600万条真克隆(包含type-1,type-2,type-3 ...
- Find the Clones(字典树)
链接:http://poj.org/problem?id=2945 Description Doubleville, a small town in Texas, was attacked by th ...
- poj 2945 Find the Clones
https://vjudge.net/problem/POJ-2945 题意: 给出n个长度相同的DNA序列,如果一个DNA序列出现过两次,那么就有说明它被复制了一次.问被复制0次,1次,2次--n- ...
- POJ2945:Find the Clones——题解
http://poj.org/problem?id=2945 还是trie树……对于结束标记累加并且开个数组记录一下即可. #include<cstdio> #include<cst ...
- 【推导】【贪心】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem D. Clones and Treasures
给你一行房间,有的是隐身药水,有的是守卫,有的是金币. 你可以任选起点,向右走,每经过一个药水或金币就拿走,每经过一个守卫必须消耗1个药水,问你最多得几个金币. 药水看成左括号,守卫看成右括号, 就从 ...
- POJ2945 Find the Clones trie树
建一颗$trie$树(当然你哈希也资瓷),边插边更新,看看搜到最底时有多少个字符串,然后更新. #include<cstdio> #include<iostream> #inc ...
随机推荐
- Unity3D Persistent Storage
[Unity3D Persistent Storage] 1.PlayerPrefs类以键值对的形式来提供PersistentStorage能力.提供小额存储能力.(做成sst可以提供大规模数据存储) ...
- C++11能用智能指针
[C++11能用智能指针] shared_ptr 是一引用计数 (reference-counted) 指针,其行为与一般 C++ 指针即为相似.在 TR1 的实现中,缺少了一些一般指针所拥有的特色, ...
- IMAQdx和IMAQ
NI-IMAQdx driver software gives you the ability to acquire images with IEEE 1394 and GigE Vision cam ...
- whereis 命令
whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数,则返回所有信息. 和find相比,whereis查找的速度非 ...
- Swift-CALayer十则示例
作者:Scott Gardner 译者:TurtleFromMars原文:CALayer in iOS with Swift: 10 Examples 如你所知,我们在iOS应用中看到的都是视图( ...
- Light oj 1100 - Again Array Queries (鸽巢原理+暴力)
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间 ...
- mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法
Mahout版本:0.7,hadoop版本:1.0.4,jdk:1.7.0_25 64bit. 经过了SimilarityJob的计算共生矩阵后,就可以开始下面一个过程了,这个过程主要是共生矩阵的乘法 ...
- 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.5 Delete删除用户]
3.5 Delete删除用户 删除也是通过ObjectID获得对象进行删除 [Authorize] public async Task<ActionResult> Delete(strin ...
- 在XAF(ASP.NET)中以ListEditor的形式调用百度地图API
因为项目需要,在系统中使用地图显示设备的地理位置.考虑过ArgGIS,Bing和Baidu地图.本来想用ArgGIS,看教程嫌麻烦.所以还是用Web地图吧.Bing的话还要申请个key,没心情.百度地 ...
- C# 绘制统计图(柱状图, 折线图, 扇形图)
统计图形种类繁多, 有柱状图, 折线图, 扇形图等等, 而统计图形的绘制方法也有很多, 有Flash制作的统计图形, 有水晶报表生成统计图形, 有专门制图软件制作, 也有编程语言自己制作的:这里我们用 ...