【NOIP普及组模拟】DNA排序
2016-09-24 12:59
393 查看
题目描述
逆序对的定义如下:有一个数列an,对于任意的ai<aj若i>j,则称(ai,aj)为一个逆序对。
我们定义一个序列的无序度为其中的逆序对个数。
我们知道对于DNA,仅仅含有ACGT四种碱基,现在我们定义A
输入
第一行两个整数L和n。接下来有n行,每一行有一个长度为L的字符串。
输出
n行,每行一个长度为L的字符串。思路
因为数据不大,可以直接暴力枚举。。#include <stdio.h> #include <string> using namespace std; int a[1000],d[1000],f[20000],o[1000][20000]; char s[1000]; int main() { freopen("dna.in", "r", stdin); freopen("dna.out", "w", stdout); int n,c,len,m,nn; scanf("%d%d",&n,&m); nn=n; for (int k=1;k<=m;k++) { scanf("%s",&s); int x=0; for (int j=0;j<=n-1;j++) { x++; a[x]=s[j]-64; } for (int i=1;i<=n;i++) o[i][k]=a[i]; len=0; for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { if (a[i]>a[j]&&j>i) { len++; } } f[k]=len; } n=nn; for (int i=1;i<=m;i++) { int min=0x7fffffff; int x=0; for (int j=1;j<=m;j++) { if (min>f[j]) { min=f[j]; x=j; } } f[x]=0x7fffffff; for (int j=1;j<=n;j++) { if (o[j][x]==1) printf("A"); if (o[j][x]==3) printf("C"); if (o[j][x]==7) printf("G"); if (o[j][x]==20) printf("T"); } printf("\n"); } }
相关文章推荐
- 【2016.10.7NOIP普及模拟】找试场
- 【有奖】NOIP普及组模拟赛题解(T1角谷猜想)
- 【NOIP普及组】2016年模拟考试(11.5)——火柴棒等式
- 2016.08.18【初中部 NOIP普及组 】模拟赛题目
- JZOJ__Day 1【NOIP普及模拟】MATRIX
- 【NOIP普及组】2016年模拟考试(9.3)——部落卫队
- 2066. 【2016.10.5NOIP普及模拟】kk的作业
- 【2016.10.7NOIP普及模拟】圆的国度
- 2016.08.19【初中部 NOIP普及组 】模拟赛题解
- 【NOIP2018普及级别模拟】牛车
- 【模拟 集合】[NOIP2008普及组]立体图 tyvj1009
- NOIP2016年普及组模拟考试(9.3) 2.笨笨的西瓜种植
- 2067. 【2016.10.5NOIP普及模拟】zy的秘密
- 【2016.10.7NOIP普及模拟】幂运算
- 【模拟】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)
- 【模拟】[NOIP2011普及组]数字反转
- 【NOIP2016普及组】 third 模拟 port
- 2016.09.10 初中部 NOIP普及组 模拟赛
- 2068. 【2016.10.5NOIP普及模拟】zy送画
- 【2016.10.7NOIP普及模拟】箱子嵌套