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

Description

One measure of ``unsortedness'' in a sequence is the number of pairs of entries that are out of order with respect to each other. For instance, in the letter sequence ``DAABEC'', this measure is 5, since D is greater than four letters to its right and E is greater than one letter to its right. This measure is called the number of inversions in the sequence. The sequence ``AACEDGG'' has only one inversion (E and D)---it is nearly sorted---while the sequence ``ZWQM'' has 6 inversions (it is as unsorted as can be---exactly the reverse of sorted).

You are responsible for cataloguing a sequence of DNA strings
(sequences containing only the four letters A, C, G, and T). However,
you want to catalog them, not in alphabetical order, but rather in order
of ``sortedness'', from ``most sorted'' to ``least sorted''. All the
strings are of the same length.

Input

The
first line contains two integers: a positive integer n (0 < n <=
50) giving the length of the strings; and a positive integer m (0 < m
<= 100) giving the number of strings. These are followed by m lines,
each containing a string of length n.

Output

Output
the list of input strings, arranged from ``most sorted'' to ``least
sorted''. Since two strings can be equally sorted, then output them
according to the orginal order.

Sample Input

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

Sample Output

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

Source

OJ-ID:
poj-1007

author:
Caution_X

date of submission:
20191010

tags:
水题

description modelling:
1.输入若干个字符串,按“有序”到“无序”顺序输出(这些串只含有A,C,G,T)
2.有序的定义为该串的逆序数,若逆序数相同,则按原来的顺序输出

major steps to solve it:
1.记录所在串各个字母的个数
2.遍历整个串,每次遍历到当前字母时加上与该字母逆序的字母的个数,然后该串中此字母个数-1
3.sort排序后输出
warnings:
1.注意审题,逆序数相同时按照原来的顺序输出
AC Code:

#include<iostream>
#include<cstdio>
#include<map>
#include<algorithm>
using namespace std;
char a[][];
map<char,int> Num[];
struct ANS{
int d,p;
}ans[];
int d[];
bool cmp(ANS a,ANS b)
{
if(a.d!=b.d) return a.d<b.d;
else return a.p<b.p;
}
int main()
{
//freopen("input.txt","r",stdin);
int n,m;
cin>>n>>m;
for(int i=;i<m;i++) {
ans[i].p=i;
for(int j=;j<n;j++) {
cin>>a[i][j];
Num[i][a[i][j]]++;
}
}
for(int i=;i<m;i++) {
ans[i].d=;
for(int j=;j<n;j++) {
if(a[i][j]=='A') {
Num[i]['A']--;
}
else if(a[i][j]=='C') {
ans[i].d=ans[i].d+Num[i]['A'];
Num[i]['C']--;
}
else if(a[i][j]=='G') {
ans[i].d=ans[i].d+Num[i]['A']+Num[i]['C'];
Num[i]['G']--;
}
else if(a[i][j]=='T') {
ans[i].d=ans[i].d+Num[i]['C']+Num[i]['G']+Num[i]['A'];
Num[i]['T']--;
}
}
}
sort(ans,ans+m,cmp);
for(int i=;i<m;i++) {
for(int j=;j<n;j++) {
cout<<a[ans[i].p][j];
}
cout<<endl;
}
return ;
}

DNA Sorting POJ - 1007的更多相关文章

  1. Mathematics:DNA Sorting(POJ 1007)

    DNA排序 题目大意:给定多个ACGT序列,按照字母顺序算出逆序数,按逆序数从小到大排列 这题其实很简单,我们只要用一个归并排序算逆序数,然后快排就可以了(插入排序也可以,数据量不大),但是要注意的是 ...

  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. Redis for OPS 06:Redis Cluster 集群

    写在前面的话 前面的主从,HA 都只是解决我们数据安全性方面的问题,并没有解决我们业务瓶颈的问题.当业务并发到达一定瓶颈的时候,我们需要对服务进行横向扩展,而不是纵向扩展.这就需要引入另外一个东西,R ...

  2. 用 Python 带你看各国 GDP 变迁

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 周萝卜 源自:萝卜大杂烩 PS:如有需要Python学习资料的小伙伴 ...

  3. map元素area热区坐标自适应窗口大小

    业务需求:点击图片热区跳转到不同的链接地址,同时要自适应窗口尺寸的变化. 问题:热区坐标点不会随着窗口调整变化 解决思路:获取初始的坐标点与图片宽高的比例,然后用比例乘以调整后的窗口宽高,就获得了新的 ...

  4. JDK1.8新特性——使用新的方式遍历集合

    JDK1.8新特性——使用新的方式遍历集合 摘要:本文主要学习了在JDK1.8中新增的遍历集合的方式. 遍历List 方法: default void forEach(Consumer<? su ...

  5. JS基础语法---数组基础知识总结

     数组: 存储一组有序的数据  数组的作用: 一次性存储多个数据 数组的定义方式: 1.构造函数定义数组: var 数组名=new Array(); 2.字面量方式定义数组: var 数组名=[]; ...

  6. qt构建错误: dependent "*.h" does not exist.

    项目中需要维护一套qt工程,今天发现一个头文件名称中单词拼写错误,就改正了,结果重新构建提示: dependent "*.h" does not exist. 原因:修改了文件后, ...

  7. iOS 国际本地化(对新项目集成和已有项目集成)

    第一推荐一篇金先生的博客,受益非浅,在这里真诚的感谢 https://www.jianshu.com/p/7cb0fad6d06f金小白 首先金小白先生把两种方式都做了介绍,第一种我就不在过多详细的讲 ...

  8. Python创建virtualenv虚拟环境方法

    一.通过virtualenv软件创建 安装:        -pip3 install virtualenv    创建虚拟环境:        -(1)virtualenv wannings-ms- ...

  9. CentOS7破解root密码

    第一步: reboot重启系统,进入修改密码步骤,出现此界面后,按e进行编辑 2.找到linux16这一段中的 ro  crashkernel=xxx, 将 ro 改成rw init=/sysroot ...

  10. pycharm添加断点,分段运行,以及继续运行;

    1.打断点,只需在代码的前面单机左键即可:2.运行,点击Debug...(如图,像贝壳一样的图标),只会运行第一个红点前的代码: 3.此时若想将第2个红点前的代码运行完毕:点击Resume Progr ...