文章
68
粉丝
691
获赞
26
访问
578.4k
用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;
}
}
登录后发布评论
暂无评论,来抢沙发