用C++解决以下问题:给出一个长度为n的数组 a_1a_2a_3an 求一个字典序最小的1~n的排列P 使得原数组重新排列成a_P_1a_P_2a_P_3a_P_n后每一个前缀的平均数都大于等于 0 。输入样例:5-1 -2 -3 4 5输出样例:4 1 2 5 3
#include
using namespace std;
bool cmp(pair<int, int>& a, pair<int, int>& b) { return a.first < b.first; }
int main() { int n; cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
vector<pair<int, int>> b(n);
for (int i = 0; i < n; i++) {
b[i] = make_pair(a[i], i + 1);
}
sort(b.begin(), b.end(), cmp);
vector<int> p(n);
for (int i = 0; i < n; i++) {
p[b[i].second - 1] = i + 1;
}
for (int i = 0; i < n; i++) {
cout << p[i] << " ";
}
cout << endl;
return 0;
原文地址: https://www.cveoy.top/t/topic/iQvO 著作权归作者所有。请勿转载和采集!