DNA排序

  题目大意:给定多个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)的更多相关文章

  1. DNA Sorting POJ - 1007

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 114211   Accepted: 45704 De ...

  2. [POJ 1007] DNA Sorting C++解题

        DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 77786   Accepted: 31201 ...

  3. poj 1007:DNA Sorting(水题,字符串逆序数排序)

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 80832   Accepted: 32533 Des ...

  4. poj 1007 (nyoj 160) DNA Sorting

    点击打开链接 DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 75164   Accepted: 30 ...

  5. [POJ] #1007# DNA Sorting : 桶排序

    一. 题目 DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 95052   Accepted: 382 ...

  6. poj 1007 DNA Sorting

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 95437   Accepted: 38399 Des ...

  7. poj 1007 DNA sorting (qsort)

    DNA Sorting Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 95209   Accepted: 38311 Des ...

  8. DNA Sorting 分类: POJ 2015-06-23 20:24 9人阅读 评论(0) 收藏

    DNA Sorting Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 88690 Accepted: 35644 Descrip ...

  9. 算法:POJ1007 DNA sorting

    这题比较简单,重点应该在如何减少循环次数. package practice; import java.io.BufferedInputStream; import java.util.Map; im ...

随机推荐

  1. Windows下设置自动关机命令

    选择“开始→运行”:1.输入“at 22:00 Shutdown -s”,这样,到了22点电脑就会出现“系统关机”对话框,默认有30秒钟的倒计时并提示你保存工作.2.输入 “Shutdown.exe ...

  2. Nginx-tomcat-redis------负载均衡以及session共享

    测试环境 Nginx 1.10.1 tomcat 7.0.70 Redis-x64-3.2.100 说明 tomcat 8 和 redis 实现session共享 有问题. 寻找源码 发现tomcat ...

  3. 使用LIBSVM工具实现样本分类预测——MatLab

    准备工作: https://www.csie.ntu.edu.tw/~cjlin/libsvm/,下载LIBSVM:(LIBSVM工具相较于MATLAB自带的工具:1).支持多分类及回归(‘-s 0’ ...

  4. java网络osi基础

  5. The report for triangle problem

    本次实验主要使用eclipse 编写三角形判定的代码,并用junit进行测试. 1.安装junit和hamcrest 下载junit-4.12.jar和hamcrest-all-1.3.jar 并且拖 ...

  6. BZOJ1146——[CTSC2008]网络管理Network

    1.题目大意:就是在动态的树上路径权值第k大. 2.分析:这个就是树链剖分+树套树 #include <cstdio> #include <cstdlib> #include ...

  7. SVN迁移到Git的过程(+ 一些技巧)

    SVN迁移到Git的过程(+ 一些技巧) 李顺利 Key Words SVN,Git,Clone,Conversion,Tips,VCS,Pro Git 关于在VCS中SVN和Git之间的迁移(Clo ...

  8. HDU 1533 最小费用最大流(模板)

    http://acm.hdu.edu.cn/showproblem.php?pid=1533 这道题直接用了模板 题意:要构建一个二分图,家对应人,连线的权值就是最短距离,求最小费用 要注意void ...

  9. 读书笔记-String

    [String]就是对char[]数组进行封装的对象,由三部分组成: 1, char数组:它是String对象所表示的字符串的超集: 2, 3, offset和count,表示了String对象表示的 ...

  10. MySql大数据量恢复

    用下面方法解决(管理mysql用的是navicat).,设置以下几个参数的值后就正常了,以下语句也可以在mysql的控制台上执行 . show variables like '%timeout%'; ...