Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

连友员函数也不能用吗?

Posted by hyerty at 2009-07-14 13:31:34
本机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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator