#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
namespace {
struct Mushroom {
int a;
long long b;
Mushroom(int a_, long long b_): a{a_}, b{b_}
{
}
};
long long select(long long& total, vector<Mushroom>& data)
{
int pos = -1;
long long res = 0;
int n = data.size();
int count = 0;
long long sum = total;
for (int i = 0; i < n; ++i) {
if (data[i].b < 0) {
++count;
sum -= data[i].a;
continue;
}
long long cur = static_cast<long long>(data[i].a) * count + data[i].b + sum;
if (pos < 0 || cur > res) {
res = cur;
pos = i;
}
}
total += data[pos].a;
data[pos].b = -1;
return res;
}
}
int main()
{
iostream::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<Mushroom> data;
data.reserve(n);
for (int i = 0; i < n; ++i) {
int a;
long long b;
cin >> a >> b;
data.emplace_back(a, b);
}
sort(data.begin(), data.end(), [](Mushroom const& lhs, Mushroom const& rhs) { return lhs.a < rhs.a; });
long long cur = 0;
long long total = 0;
for (int k = 1; k <= n; ++k) {
cur += select(total, data);
cout << cur << '\n';
}
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <iostream> #include <algorithm> #include <vector> using namespace std; namespace { struct Mushroom { int a; long long b; Mushroom(int a_, long long b_): a{a_}, b{b_} { } }; long long select(long long& total, vector<Mushroom>& data) { int pos = -1; long long res = 0; int n = data.size(); int count = 0; long long sum = total; for (int i = 0; i < n; ++i) { if (data[i].b < 0) { ++count; sum -= data[i].a; continue; } long long cur = static_cast<long long>(data[i].a) * count + data[i].b + sum; if (pos < 0 || cur > res) { res = cur; pos = i; } } total += data[pos].a; data[pos].b = -1; return res; } } int main() { iostream::sync_with_stdio(false); cin.tie(nullptr); int n; cin >> n; vector<Mushroom> data; data.reserve(n); for (int i = 0; i < n; ++i) { int a; long long b; cin >> a >> b; data.emplace_back(a, b); } sort(data.begin(), data.end(), [](Mushroom const& lhs, Mushroom const& rhs) { return lhs.a < rhs.a; }); long long cur = 0; long long total = 0; for (int k = 1; k <= n; ++k) { cur += select(total, data); cout << cur << '\n'; } return 0; } |
English