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 ...
随机推荐
- HDU 1787 GCD Again(欧拉函数,水题)
GCD Again Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- hdu 1576 A/B (扩展欧几里德简单运用)
http://acm.hdu.edu.cn/showproblem.php?pid=1576 A/B Time Limit: 1000/1000 MS (Java/Others) Memory Lim ...
- 判断时间大小 yyyy-MM-dd 格式
// yyyy-MM-dd function bigThanToday(someDate){ var date = new Date(); var dateStr = date.getFullYear ...
- IOS深入学习(19)之View object
1 前言 本章主要介绍了View视图对象,包括了其属性,视图间关系和CALayer的简介. 英文原文:http://blog.csdn.net/developer_zhang/article/deta ...
- android 开源 + 一些素材网站
ui 设计工具:http://www.sketchcn.com/ 分类汇总: https://github.com/Trinea/android-open-project 直接拿来用!最火的Andro ...
- JS阻塞的问题
常见问题 http://www.zhihu.com/question/23101413 阻塞特性: JS 有个很无语的阻塞特性,就是当浏览器在执行JS 代码时,不能同时做其他任 ...
- (剑指Offer)面试题35:第一个只出现一次的字符
题目: 在字符串中找出第一个只出现1次的字符,如输入“abaccdeff”,则输出b. 思路: 1.暴力遍历 从头开始扫描字符串中的每个字符,当访问某个字符时,取该字符与后面的每个字符相比较,如果没有 ...
- Mysql用户密码设置修改和权限分配
我的mysql安装在c:\mysql 一.更改密码 第一种方式: 1.更改之前root没有密码的情况 c:\mysql\bin>mysqladmin -u root password " ...
- Oracle主键自增的实现
create sequence seq_字段名_表名 minvalue 1 maxvalue 999999999999999999999999999 start with 1 increment by ...
- Unable to execute dex: Multiple dex files define 解决方法
程序编译正常,在用Eclipse调试执行时,报错Unable to execute dex: Multiple dex files define: 方法: 原因是有重复的.jar被引用,可以 ...