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 ...
随机推荐
- LightOJ 1341 - Aladdin and the Flying Carpet (唯一分解定理 + 素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1341 Aladdin and the Flying Carpet Time Limit:3000 ...
- Cisco SDM
SDM连接方式:http+telnet / https+ssh 要使用SDM对CISCO设备实现集中式管理,必须在设备上键入如下命令: 步骤1: 要启用路由器的HTTP/HTTPS 服务器,请 ...
- 删除qq历史签名
我们在设置新的个性签名的时候之前的签名会被记录,我们可以用手机qq删除这些历史签名,告别过去,做崭新的自己. 到需要删除的历史签名, 从右至左滑动屏幕
- django admin site配置(二)
1. ModelAdmin.inlines 将有外键的子类包含进视图 ,实例: class Author(models.Model): name = models.CharField(max_leng ...
- manacher算法(转载)
原网址:http://blog.sina.com.cn/s/blog_70811e1a01014esn.html manacher算法是我在网上无意中找到的,主要是用来求某个字符串的最长回文子串.不过 ...
- 用完成例程(Completion Routine)实现的重叠I/O模型
/// 用完成例程(Completion Routine)实现的重叠I/O模型 /// 异步IO模型 /// 用完成例程来实现重叠I/O比用事件通知简单得多.在这个模型中,主线程只用不停的接受连接 / ...
- rome实现rss订阅与发布
1. 什么是RSS RSS也叫聚合RSS,是在线共享内容的一种简易方式(也叫聚合内容, 简易供稿,Really Simple Syndication(真正简单的聚合 )).通常在时效性比较强的内容上使 ...
- 给js function的参数设置默认值
C# 中 function func(a,b=1){//具体方法} js 中 function func(a,b){ a= arguments[0] || 10; b= arguments[1] || ...
- 如何在微博侧栏中加入自己的微博[js]
<div class="box"> <ul> <li> <object classid="clsid:D27CDB6E-AE6D ...
- 关于Java中的程序,进程和线程的详解...
程序:一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本. 进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个 ...