问题描述:http://poj.org/problem?id=1007
这个题目是求给定字符串的逆序数量,然后排序一下,输出。因为题目给定的数据范围比较小,所以直接做,不用做优化。
我所采用的排序的方式比较原始,2维数组,第一维放逆序数,第二维根据第一维放排序的下标。
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int p[110][2];
void solve(int k,string str)
{
for(int i=0;i<str.length();i++)
for(int j=i+1;j<str.length();j++)
if(str[i]>str[j])
p[k][0]++;
}
int sort(int n)
{
int first,temp;
for(int i=1;i<=n;i++)
{
int min=1000000,index=0;
for(int j=1;j<=n;j++)
{
if(p[j][0]<min)
{
min=p[j][0];
index=j;
}
}
if(i==1)
first=index;
else
p[temp][1]=index;
p[index][0]=100000;
temp=index;
}
return first;
}
int main()
{
string str[110];
int n,l,start;
memset(p,0,sizeof(p));
cin>>l>>n;
for(int i=1;i<=n;i++)
{
cin>>str[i];
solve(i,str[i]);
}
start=sort(n);
for(int i=1;i<=n;i++)
{
cout<<str[start]<<endl;
start=p[start][1];
}
return 0;
}