| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
连友员函数也不能用吗?本机VC2003和Dev-C++都顺利通过的代码,提交之后编译3次,直到修改对友元函数的使用。POJ用的是什么C++编译器啊?
/**
计算出每个字符串的逆序数,然后使用稳定排序进行排序。
*/
#include <stdio.h>
#include <assert.h>
#include <string.h>
//#include <iostream>
#include <algorithm>
#include <stack>
#include <functional>
#include <vector>
#define N 51
#define M 100
struct DNA {
char s[N];
int r;
void calculateInversion() {;
r = 0;
int len = strlen(s);
std::vector<char> st;
std::vector<char>::iterator iter;
for(int i = 0; i < len; ++i) {
iter = std::find_if(st.begin(), st.end(),
std::bind2nd(std::greater<char>(), s[i]));
r += st.end() - iter;
st.insert(iter, s[i]);
}
}
friend bool InversionLess(DNA const& lhs, DNA const& rhs) {
return lhs.r < rhs.r;
}
};
DNA dna[M];
// 单元测试
void testCalculateInversion() {
DNA d;
#define PUT() \
printf("inversion of '%s' is %d\n", d.s, d.r) \
strcpy(d.s, "DAABEC");
d.calculateInversion();
PUT();
assert(d.r == 5);
strcpy(d.s, "AACEDGG");
d.calculateInversion();
PUT();
assert(d.r == 1);
#undef PUT
}
int main() {
#ifdef _DEBUG
freopen("in.txt", "r", stdin);
#endif
#ifdef _DEBUG
testCalculateInversion();
#endif
int n, m;
while(scanf("%d %d", &n, &m) == 2) {
for(int i = 0; i < m; ++i) {
scanf("%s", dna[i].s);
dna[i].calculateInversion();
}
std::stable_sort(dna, dna + m, InversionLess);
for(int i = 0; i < m; ++i) {
puts(dna[i].s);
}
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator