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]);
}