文章

68

粉丝

691

获赞

26

访问

578.4k

头像
问题的重点在于别用cin,cout
P1546
发布于2020年5月28日 16:18
阅读数 7.0k

用map直接写,

Map采用的是红黑树实现的,在插入、删除、查找时的复杂度都为 O(log n)

我们可以维护一个大小为k的红黑树,不断的维护他,当我用cin的时候这个题是不行的,数据量太大,scanf加速输入很快就过了。

struct peo {
	char name[65];
	double price;
}a[MAX];
bool cmp(peo p1, peo p2) {
	return p1.price > p2.price;
}
int main() {
	int m, n;
	while (scanf("%d%d", &n, &m)!=EOF) {
		map<double, string> ma;
		for (int i = 0; i < n; i++) {
			scanf("%s%lf", a[i].name, &a[i].price);
			if (i < m)ma[a[i].price] = a[i].name;
			else if (a[i].price > (*ma.begin()).first)
				ma.erase(ma.begin()), ma[a[i].price] = a[i].name;
		}
		vector<P> v;
		for (map<double, string>::iterator i = ma.begin(); i != ma.end(); i++)
			v.push_back(P((*i).first, (*i).second));
		for (int i = m - 1; i >= 0; i--)
			cout << v[i].second << ' ' << v[i].first << endl;
		cout << endl;
	}
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发