[POJ1007]DNA Sorting

试题描述

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.

输入

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 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.

输入示例

AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

输出示例

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

数据规模及约定

见“输入

题解?

做这题练英语玩玩。并不知道这题跟 DNA 有毛关系。。。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <stack>
#include <vector>
#include <queue>
#include <cstring>
#include <string>
#include <map>
#include <set>
using namespace std; const int BufferSize = 1 << 16;
char buffer[BufferSize], *Head, *Tail;
inline char Getchar() {
if(Head == Tail) {
int l = fread(buffer, 1, BufferSize, stdin);
Tail = (Head = buffer) + l;
}
return *Head++;
}
int read() {
int x = 0, f = 1; char c = getchar();
while(!isdigit(c)){ if(c == '-') f = -1; c = getchar(); }
while(isdigit(c)){ x = x * 10 + c - '0'; c = getchar(); }
return x * f;
} #define maxn 110
#define maxl 60
int n, l;
char S[maxn][maxl]; vector <int> id[maxn*maxn];
void process(int x) {
int A = 0, C = 0, G = 0, sum = 0;
for(int i = l; i >= 1; i--) {
if(S[x][i] == 'A') A++;
if(S[x][i] == 'C') sum += A, C++;
if(S[x][i] == 'G') sum += A + C, G++;
if(S[x][i] == 'T') sum += A + C + G;
}
id[sum].push_back(x);
return ;
} int main() {
l = read(); n = read();
for(int i = 1; i <= n; i++) scanf("%s", S[i] + 1), process(i); for(int i = 0; i <= l * l; i++)
for(int j = 0; j < id[i].size(); j++) printf("%s\n", S[id[i][j]] + 1); return 0;
}

最新文章

  1. SharePoint 2013 自定义扩展菜单
  2. linux(centos)下挂载nefs文件系统
  3. 在Ubuntu搭建.NET Core环境
  4. QuickFix/N简介
  5. Mysql备份系列(2)--mysqldump备份(全量+增量)方案操作记录
  6. 详解 Array.prototype.slice.call(arguments)
  7. BackgroundWorker实现的winfrom中实现异步等待加载图片显示
  8. prototype.js 源码解读(01)
  9. 《Ruby语言入门教程v1.0》学习笔记-01
  10. 【翻译】Why JavaScript Is and Will Continue to Be the First Choice of Programmers
  11. 让你的JS代码更具可读性
  12. Lucene学习笔记1(V7.1)
  13. 华为防火墙USG5500-企业双ISP出口
  14. uni-app版本在线更新问题(下载完成安装时一闪而过,安卓8以上版本)
  15. HDU2138(Miller-Rabin素数检测)
  16. deepin云打印实现连接Windows打印机
  17. 清理sqlserver 2012 日志文件
  18. VS2008卡死无反映解决
  19. 《Pro SQL Server Internals, 2nd edition》中CHAPTER 7 Designing and Tuning the Indexes中的Clustered Index Design Considerations一节(译)
  20. 分治算法--寻找第k大数

热门文章

  1. css边框阴影
  2. [1015][JSOI2008]星球大战starwar(并查集)
  3. [bzoj 1911][Apio 2010]特别行动队(斜率优化DP)
  4. 标准I/O
  5. Bootstrap3.0学习第十六轮(进度条、媒体对象、列表组、面板)
  6. DOM(六)事件类型
  7. 第四次个人作业--必应词典(PC端)分析
  8. Java编程思想学习(十四) 枚举
  9. BZOJ1086 [SCOI2005]王室联邦
  10. java 线程---成员变量与局部变量