PKU1007

問題分を読めればわかります

#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;

int m, n;
vector<pair<int, int> > so;
char dna[50][100];

bool comp(const pair<int, int>& a, const pair<int, int>& b){
    return a.first < b.first;
}

int main(){
    scanf("%d %d", &n, &m);
    getchar();
    for(int i = 0; i < m; i++){
	int rank = 0;
	for(int j = 0; j < n; j++){
	    scanf("%c", &dna[j][i]);
	}
	getchar();
	for(int j = 0; j < n; j++){
	    for(int t = j; t < n; t++){
		if(dna[j][i] > dna[t][i]) rank++;
	    }
	}
	so.push_back(make_pair(rank, i));
    }
    sort(so.begin(), so.end(), comp);
    for(vector<pair<int, int> >::iterator it = so.begin(); it != so.end(); it++){
	for(int i = 0; i < n; i++){
	    pair<int, int> tmp = *it;
	    printf("%c", dna[i][tmp.second]);
	    if(i == n - 1) printf("\n");
	}
    }
    return 0;
}