算法
(排序) $O(n\log n)$
题意是对于城市名的字典序小的先输出编号,而对于同一城市的餐厅按照他们的评分从高到低输出编号。于是,我们可以利用C++的 tuple
把城市,评分和 $id$ 绑定并把它存入 $vector$,其中评分需要取其相反数,然后用 $sort$ 函数对 $vector$ 进行排序即可(这里 $sort$ 的排序是按照关键字的先后顺序进行排序的)。
C++ 代码
#include <bits/stdc++.h>
using std::cin;
using std::cout;
using std::string;
using std::tuple;
using std::vector;
int main() {
int n;
cin >> n;
vector<tuple<string, int, int>> a;
string s;
int p;
for (int i = 1; i <= n; ++i) {
cin >> s >> p;
p = -p;
a.push_back(tie(s, p, i));
}
sort(a.begin(), a.end());
for (int i = 0; i < n; ++i) {
cout << std::get<2>(a[i]) << '\n';
}
return 0;
}