Mathematics:DNA Sorting(POJ 1007)

题目大意:给定多个ACGT序列,按照字母顺序算出逆序数,按逆序数从小到大排列
这题其实很简单,我们只要用一个归并排序算逆序数,然后快排就可以了(插入排序也可以,数据量不大),但是要注意的是他要保持原来的顺序,fcmop那里要写当a.inverse=b.inverse时,返回0
#include <iostream>
#include <functional>
#include <algorithm> using namespace std;
typedef int Position;
typedef struct _set
{
char input[];
int inverse;
}Set; void Merge_Sort(Position, Position, int *const);
void Merge(Position, Position, int *const); static Set input[];
static char A[], Tmp_Array[]; int fcomp(const void *a, const void *b)
{
if ((*(Set *)a).inverse - (*(Set *)b).inverse == )
return ;
return (*(Set *)a).inverse - (*(Set *)b).inverse;
} int main(void)
{
int line_sum, length, inverse_num; while (~scanf("%d%d", &length, &line_sum))
{
getchar();
for (int i = ; i < line_sum; i++)
{
scanf("%s", input[i].input);
strcpy(A, input[i].input);
inverse_num = ;
Merge_Sort(, length - , &inverse_num);
input[i].inverse = inverse_num;
}
qsort(input, line_sum, sizeof(Set), fcomp);
for (int i = ; i < line_sum; i++)
printf("%s\n", input[i].input);
}
return ;
} void Merge_Sort(Position Left, Position Right, int *const Inverse_Num)
{
if (Left < Right)
{
Position Mid = (Left + Right) / ;
Merge_Sort(Left, Mid, Inverse_Num);
Merge_Sort(Mid + , Right, Inverse_Num);
Merge(Left, Right, Inverse_Num);
}
} void Merge(Position Left, Position Right, int *const Inverse_Num)
{
Position Mid = (Left + Right) / , lpos = Left, rpos = Mid + , pos = Left; for (; lpos <= Mid && rpos <= Right;)
{
if (A[lpos] <= A[rpos])
Tmp_Array[pos++] = A[lpos++];
else
{
Tmp_Array[pos++] = A[rpos++];
(*Inverse_Num) += (Mid + - lpos);
}
}
while (lpos <= Mid)
Tmp_Array[pos++] = A[lpos++];
while (rpos <= Right)
Tmp_Array[pos++] = A[rpos++];
for (int i = Left; i <= Right; i++)
A[i] = Tmp_Array[i];
}

Mathematics:DNA Sorting(POJ 1007)的更多相关文章
- DNA Sorting POJ - 1007
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 114211 Accepted: 45704 De ...
- [POJ 1007] DNA Sorting C++解题
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 77786 Accepted: 31201 ...
- poj 1007:DNA Sorting(水题,字符串逆序数排序)
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 80832 Accepted: 32533 Des ...
- poj 1007 (nyoj 160) DNA Sorting
点击打开链接 DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 75164 Accepted: 30 ...
- [POJ] #1007# DNA Sorting : 桶排序
一. 题目 DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 95052 Accepted: 382 ...
- poj 1007 DNA Sorting
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 95437 Accepted: 38399 Des ...
- poj 1007 DNA sorting (qsort)
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 95209 Accepted: 38311 Des ...
- DNA Sorting 分类: POJ 2015-06-23 20:24 9人阅读 评论(0) 收藏
DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 88690 Accepted: 35644 Descrip ...
- 算法:POJ1007 DNA sorting
这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...
随机推荐
- 今天<s:hidden>突然能用了
曾经好几个作业中都想要用<s:hidden>隐形传值,一直没有成功. 今天放弃使用了,竟然成功了. 我放弃使用居然成功了,原来只要设置好getter和setter之后就不用管了,只要变量名 ...
- linux远程复制和压缩文件的命令
1.linux导出指定数据库表 mysqldump 127.0.0.1 -uname -ppwd databasename tablename>/home/name/tablename. ...
- Memcached和Redis对比和适用场景
关于memcached和redis的使用场景,根据大神们的讨论和我在网上查到的资料,总结一下: 两者对比: redis提供数据持久化功能,memcached无持久化: redis的数据结构比memca ...
- CSS3计数器的使用-遁地龙卷风
结合::before实现自定义列表 body { counter-reset:dnf; } div::before { content:counter(dnf) "."; coun ...
- ubuntu缺少libgtk-x11-2.0.so.0的解决办法
安装了wineqq之后运行发现提示少了libgtk-x11-2.0.so.0这个库,找了很多教程都不能解决,最后终于找到一个有用的,打开终端输入以下命令即可: sudo apt-get install ...
- iOS开发——UI进阶篇(十五)Quartz2D介绍
一.Quartz2D简介 1.什么是Quartz2DQuartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作绘制图形 : 线条\三角形\矩形\圆\弧等绘制文字绘 ...
- BZOJ1036——树的统计count
1.题目大意:给你一棵树,有三种操作 1>qmax,询问u到v中间点权的最大值 2>qsum,询问u到v中间点权和 3>change,把u这个节点的权值改为v 2.分析:树链剖分的裸 ...
- Hello 2016
Hello 2016 I am really happy to work and study here. Nothing is better than be oneself ! It's import ...
- centos rpmforge repo
在这里找到合适的rpm包:http://pkgs.repoforge.org/rpmforge-release/ 下载 wget http://pkgs.repoforge.org/rpmforge- ...
- 一次Android脱壳training
一.查壳 jeb载入发现没有代码,怀疑加壳 用查壳工具查壳 (爱加密) apktool解包 得到其 package name: loading.androidmanual main activity ...