Posted on 2011-11-20 11:03
C小加 閱讀(2388)
評(píng)論(0) 編輯 收藏 引用 所屬分類(lèi):
解題報(bào)告
題意:
輸入是第一行兩個(gè)數(shù)字,表示每行的長(zhǎng)度和總行數(shù)
然后是n行字符串
求出每行字符串的逆序數(shù),按逆序數(shù)從小到大的順序排列所有的字符串。。
什么是逆序數(shù)呢,在一個(gè)排列中,如果前面的數(shù)比后面的大就稱為逆序.一個(gè)排列中的逆序總數(shù)稱為逆序數(shù)。。
例如:給出32145求出它的逆序數(shù),從它的第二個(gè)數(shù)開(kāi)始,和它前面的數(shù)比較大小,如果是從小到大的順數(shù),則逆序數(shù)為0,如果前面有幾個(gè)比它大的逆序數(shù)就是幾。。。
方法:
對(duì)于每個(gè)字符串求出逆序數(shù),然后根據(jù)逆序數(shù)對(duì)字符串排序輸出。
#include <iostream>
#include <string>
#include <algorithm>
#include <cstdio>
using namespace std;
typedef struct
{
string str;
int num;
}DNA;
DNA d[100];
bool cmp(DNA a,DNA b)
{
return a.num<b.num;
}
int main(void)
{
int m,n;
cin>>m>>n;
int i=0;
for(;i<n;i++)
{
cin>>d[i].str;
d[i].num=0;
for(int k=1;k<m;k++)
{
for(int j=0;j<k;j++)
{
if(d[i].str[k]<d[i].str[j]) d[i].num++;
}
}
}
stable_sort(d,d+n,cmp);
for(i=0;i<n;i++)
{
cout<<d[i].str<<endl;
}
return 0;
}