Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- #include <optimization.h>
- using namespace std;
- int64_t n;
- vector<int64_t> a, b;
- int64_t solve_ok() {
- // struct job {
- // int64_t a;
- // int64_t b;
- // };
- vector<int> jobs(n);
- for (int i = 0; i < n; i++) {
- jobs[i] = {i};
- }
- sort(jobs.begin(), jobs.end(), [](const int &i, const int &j) {
- return min(2 * a[i], 2 * b[j] + 1) < min(2 * a[j], 2 * b[i] + 1);
- });
- long long time_a = 0;
- long long time_b = 0;
- for (int i = 0; i < n; i++) {
- time_a += a[jobs[i]];
- time_b = max(time_a, time_b) + b[jobs[i]];
- }
- return time_b;
- }
- int64_t solve_wa(int64_t comp, bool reverse_b) {
- vector<int64_t> p(n);
- for (int i = 0; i < n; i++) {
- p[i] = i;
- }
- if (comp == 1) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return a[i] < a[j]; });
- } else if (comp == 2) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return b[i] < b[j]; });
- } else if (comp == 3) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return a[i] + b[i] < a[j] + b[j]; });
- } else if (comp == 4) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return a[i] - b[i] < a[j] - b[j]; });
- } else if (comp == 5) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return a[i] * b[i] < a[j] * b[j]; });
- } else if (comp == 6) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return (double) a[i] / b[i] < (double) a[j] / b[j]; });
- } else if (comp == 7) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return min(a[i], b[j]) < min(a[j], b[i]); });
- } else if (comp == 8) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return max(a[i], b[j]) < max(a[j], b[i]); });
- } else if (comp == 9) {
- stable_sort(p.begin(), p.end(), [&](int i, int j) { return max(a[i], b[i]) < max(a[j], b[j]); });
- }
- if (reverse_b) {
- reverse(p.begin(), p.end());
- }
- long long time_a = 0, time_b = 0;
- for (int i = 0; i < n; i++) {
- time_b = max(time_a += a[p[i]], time_b) + b[p[i]];
- }
- return time_b;
- }
- int main() {
- n = readInt();
- int64_t L = readInt();
- int64_t R = readInt();
- int comp = readInt(), reverse_b = readInt();
- a.resize(n), b.resize(n);
- while (true) {
- for (int i = 0; i < n; i++) {
- a[i] = rand() % (R - L + 1) + L;
- }
- for (int i = 0; i < n; i++) {
- b[i] = rand() % (R - L + 1) + L;
- }
- long long answer = solve_ok();
- long long output = solve_wa(comp, reverse_b);
- if (answer != output) {
- writeInt(n, '\n');
- for (int i = 0; i < n; i++) {
- writeInt(a[i], ' ');
- }
- writeChar('\n');
- for (int i = 0; i < n; i++) {
- writeInt(b[i], ' ');
- }
- exit(0);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement