POJ 1007&&HDU 1379 DNA Sorting(水~)

2485 ワード

Descriptionの各DNAには「無秩序度」があり、逆順対が多ければ多いほど無秩序度が大きくなり、多組のDNA(A,C,G,Tのみからなる)が与えられ、それらを無秩序度の大きさで昇順してInputの第1行の2つの整数n,m(n<=50,m<=100)を出力し、nは各DNAの長さを表し、mはDNAの個数を表し、次にm行毎に1つの文字列がDNA Outputを表してDNAを無秩序度に昇順してSample Input 106 AACATGAAGG TTGGCCAA TTTGGCAAA GATCAGATTT CCCGGGA ATCGATGCAT Sample Output CCCGGA AACATGAAAAAAGG GATCATTT ATCGATGCAT TTGCCAAAA TTTGCAT TTGGCCAA TTTGGCAAA TT TGGCAAA Solution暴捜逆序数を求め、それをソートすればCode
#include<stdio.h>
#include<string.h>

int main()
{
    int n,m,i,j,k,s[200];
    char c[200][100],t;
    scanf("%d%d",&m,&n);
    for(i=0;i<n;i++)
    {
        s[i]=0;
        scanf("%s",c[i]);
        for(j=0;j<m;j++)//    
        {
            for(k=0;k<j;k++)
                if(c[i][j]<c[i][k])
                    s[i]++; 
        }
    } 
    for(i=0;i<n-1;i++)//           DNA   
    {
        k=i;
        for(j=i+1;j<n;j++)  
            if(s[k]>s[j])
                k=j;
        if(k!=i)
        {
            for(j=0;j<m;j++)
            {
                t=c[k][j];
                c[k][j]=c[i][j];
                c[i][j]=t;
            }
            j=s[k];
            s[k]=s[i];
            s[i]=j;
        }
    }
    for(i=0;i<n;i++)
        printf("%s
"
,c[i]); }