# |
Submission time |
Handle |
Problem |
Language |
Result |
Execution time |
Memory |
509924 |
2022-01-14T12:03:31 Z |
600Mihnea |
Hiring (IOI09_hiring) |
C++17 |
|
535 ms |
27632 KB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
struct Guy {
ll min_salary;
ll level;
ll ind;
};
struct Fraction {
ll x, y;
Fraction(ll x, ll y) : x(x), y(y) {
}
};
Fraction operator * (Fraction a, ll x) {
a.x *= x;
return a;
}
Fraction operator * (ll x, Fraction a) {
a.x *= x;
return a;
}
bool operator < (Fraction a, Fraction b) {
return a.x * (ll) b.y < b.x * (ll) a.y;
}
bool operator > (Fraction a, Fraction b) {
return a.x * (ll) b.y > b.x * (ll) a.y;
}
bool operator == (Fraction a, Fraction b) {
return a.x * (ll) b.y == b.x * (ll) a.y;
}
bool operator < (Guy a, Guy b) {
return Fraction(a.min_salary, a.level) < Fraction(b.min_salary, b.level);
}
const ll N = (ll) 5e5 + 7;
ll n;
ll money;
Guy guys[N];
signed main() {
ios::sync_with_stdio(0); cin.tie(0);
// freopen ("input", "r", stdin);
cin >> n >> money;
for (ll i = 1; i <= n; i++) {
cin >> guys[i].min_salary >> guys[i].level;
guys[i].ind = i;
}
sort(guys + 1, guys + n + 1);
multiset<pair<ll, ll>> mn;
ll current_sum = 0;
ll prll = 0;
Fraction zda(0, 0);
for (ll i = 1; i <= n; i++) {
current_sum += guys[i].level;
mn.insert({guys[i].level, guys[i].ind});
while (current_sum * Fraction(guys[i].min_salary, guys[i].level) > Fraction(money, 1)) {
assert(!mn.empty());
auto it = mn.end();
it--;
current_sum -= it->first;
mn.erase(it);
}
if ((ll) mn.size() > prll) {
prll = (ll) mn.size();
zda = current_sum * Fraction(guys[i].min_salary, guys[i].level);
} else {
if ((ll) mn.size() == prll) {
if (current_sum * Fraction(guys[i].min_salary, guys[i].level) < zda) {
zda = current_sum * Fraction(guys[i].min_salary, guys[i].level);
}
}
}
}
mn.clear();
current_sum = 0;
for (ll i = 1; i <= n; i++) {
current_sum += guys[i].level;
mn.insert({guys[i].level, guys[i].ind});
while (current_sum * Fraction(guys[i].min_salary, guys[i].level) > Fraction(money, 1)) {
assert(!mn.empty());
auto it = mn.end();
it--;
current_sum -= it->first;
mn.erase(it);
}
if ((ll) mn.size() == prll && zda == current_sum * Fraction(guys[i].min_salary, guys[i].level)) {
vector<ll> sol;
for (auto &it : mn) {
sol.push_back(it.second);
}
sort(sol.begin(), sol.end());
cout << (ll) sol.size() << "\n";
for (auto &i : sol) {
cout << i << "\n";
}
exit(0);
}
}
assert(0);
return 0;
}
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
0 ms |
204 KB |
Output is correct |
4 |
Correct |
1 ms |
204 KB |
Output is correct |
5 |
Correct |
1 ms |
204 KB |
Output is correct |
6 |
Correct |
1 ms |
332 KB |
Output is correct |
7 |
Correct |
2 ms |
332 KB |
Output is correct |
8 |
Correct |
1 ms |
332 KB |
Output is correct |
9 |
Correct |
2 ms |
460 KB |
Output is correct |
10 |
Correct |
5 ms |
624 KB |
Output is correct |
11 |
Correct |
4 ms |
460 KB |
Output is correct |
12 |
Correct |
4 ms |
844 KB |
Output is correct |
13 |
Correct |
3 ms |
588 KB |
Output is correct |
14 |
Correct |
7 ms |
972 KB |
Output is correct |
15 |
Correct |
8 ms |
1056 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
204 KB |
Output is correct |
2 |
Correct |
0 ms |
204 KB |
Output is correct |
3 |
Correct |
1 ms |
204 KB |
Output is correct |
4 |
Correct |
11 ms |
1356 KB |
Output is correct |
5 |
Correct |
30 ms |
2808 KB |
Output is correct |
6 |
Correct |
249 ms |
15136 KB |
Output is correct |
7 |
Correct |
420 ms |
21488 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
1 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1 ms |
332 KB |
Output is correct |
2 |
Correct |
2 ms |
332 KB |
Output is correct |
3 |
Correct |
1 ms |
332 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
91 ms |
6108 KB |
Output is correct |
2 |
Correct |
93 ms |
6176 KB |
Output is correct |
3 |
Correct |
85 ms |
6104 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
115 ms |
10540 KB |
Output is correct |
2 |
Correct |
110 ms |
10496 KB |
Output is correct |
3 |
Correct |
114 ms |
10528 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
377 ms |
23300 KB |
Output is correct |
2 |
Correct |
405 ms |
23272 KB |
Output is correct |
3 |
Correct |
417 ms |
23424 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
535 ms |
27524 KB |
Output is correct |
2 |
Correct |
526 ms |
27612 KB |
Output is correct |
3 |
Correct |
531 ms |
27632 KB |
Output is correct |