1007

4328 ワード

合計時間制限:
1000ms
メモリの制限:
65536kB
説明
長さが等しいDNA列(ACGTの4文字のみ)がいくつかありますが、逆順ペアの数で並べ替えてください.
逆順序対とは、文字列Aの2文字A[i],A[j]を指し、iA[j]の性質を有する.例えば、文字列「ATCG」では、TとCは逆シーケンス対であり、TとGは別の逆シーケンス対であり、この文字列の逆シーケンス対数は2である.
 
入力
1行目:2つの整数nとm,n(02行目からm+1行目:各行はnの長さの文字列である
しゅつりょく
逆順対数の少ないものから複数の出力文字列まで、逆順対数のように多くの文字列が入力された順序で出力されます.
サンプル入力
10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT

サンプル出力
CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

 
解決方案一:G++
 
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std ;
#define N 51
#define M 101
int main()
{   int count(const char ch[],int len) ;
    void swap(char ch[][N],int a[],int len) ;
    void print(char ch[][N],int len) ;
    char ch[M][N] ;
    int a[M];
    int n,m ;
    cin>>n>>m ;
    for(int i=0;i<m;i++)
        {
            cin>>ch[i];
            int len = strlen(ch[i]) ;
            a[i] = count(ch[i],len) ;
        }
    swap(ch,a,m) ;
    print(ch,m) ;
    return 0 ;
}
int count(const char ch[],int len){
    int k=0;
 for(int i=0;i<len;i++)
 {
     for(int j=i+1;j<len;j++){
     if((ch[j]-ch[i])<0) k++ ;
     }
 }
    return k ;
}
void swap(char ch[][N],int a[],int len)
{
    for(int i=0;i<len;i++){
      int temp = a[i] ;
      char c[51];

        for(int j=i+1;j<len;j++){
           if(a[i]>a[j]){
              temp = a[i] ;
              a[i] = a[j] ;
              a[j] = temp ;
              strcpy(c,ch[i]) ;
              strcpy(ch[i],ch[j]) ;
              strcpy(ch[j],c) ;
           }
        }
    }

}
void print(char ch[][N],int len)
{
    for(int i=0;i<len;i++)
    {
        cout<<ch[i]<<endl ;
    }
}

 
ソリューション2:Java
 
package dsa;

import java.util.Scanner;
/**
 * 1007 
 * @author tanlvxu
 *
 */
public class Demo9 {

	public static void main(String[] args) {
		test();

	}
    public static void test()
    {
    	Scanner sc = new Scanner(System.in) ;
		int n = sc.nextInt() ;
		int m = sc.nextInt() ;
		String str[] = new String[m] ;
		int a[] = new int[m] ;
		for(int i=0;i<m;i++)
		{
			str[i] = sc.next() ;
			a[i] = count(str[i]) ;
		}
        swap(str,a) ;
        print(str) ;
        
    }
    /**
     *      
     * @param str
     * @return
     */
    public static int count(String str)
    {    
    	int k = 0 ;
    	for(int i=0;i<str.length();i++)
    	{    
    		for(int j=i+1;j<str.length();j++)
    		{ 
    			if(str.charAt(i)-str.charAt(j)>0)  k++ ;
    			
    		}
    	}
    	return k ;
    }
    /**
     *   
     * @param str
     */
    public static void print(String str[])
    {
    	for(int i=0;i<str.length;i++)
    	{    
    		System.out.println(str[i]) ;
    	}
    }
    /**
     *     
     * @param str
     * @param a
     */
    public static void swap(String str[],int a[])
    {
    	for(int i=0;i<str.length;i++)
    	{    
    		int temp = a[i] ;
    		String s ;
    		for(int j=i+1;j<str.length;j++)
    		{ 
    			if(a[i]>a[j]){
    	              temp = a[i] ;
    	              a[i] = a[j] ;
    	              a[j] = temp ;
    	           s =  str[i]  ;
    	           str[i] = str[j] ;
    	           str[j] = s ;
    	           }

    			
    		}
    	}
    }
}