Submission #483315

# Submission time Handle Problem Language Result Execution time Memory
483315 2021-10-28T16:14:25 Z lukaszgniecki Carnival Tickets (IOI20_tickets) C++17
11 / 100
1 ms 716 KB
#include "tickets.h"
#include <bits/stdc++.h>

#define ll long long
#define str string
#define pii pair<int, int>
#define pll pair<ll, ll>
#define fi first
#define se second

#define vc vector<char>
#define vvc vector<vc>
#define vi vector<int>
#define vvi vector<vi>
#define vvvi vector<vvi>
#define vvvvi vector<vvvi>
#define vll vector<ll>
#define vvll vector<vll>
#define vvvll vector<vvll>
#define vvvvll vector<vvvll>
#define vs vector<str>
#define vvs vector<vs>
#define vpii vector<pii>
#define vvpii vector<vpii>
#define vpll vector<pll>
#define vvpll vector<vpll>
#define vb vector<bool>
#define vvb vector<vb>
#define rep(i, a, b) for (int i = (a); i < int(b); i++)
#define repi(i, a, b) for (int i = (a); i <= int(b); i++)

using namespace std;

int n, m;

/*void allocate_tickets(vvi s) {
    rep(i, 0, n) {
        rep(j, 0, m) {
            cerr << s[i][j] << ' ';
        }
        cerr << '\n';
    }
}*/

ll find_maximum(int k, vvi tickets) {
    // yolo
    n = tickets.size();
    m = tickets[0].size();

    rep(i, 0, n) {
        sort(tickets[i].begin(), tickets[i].end());
    }

    vi lo(n, 0);
    vi hi(n, m - 1);

    vvi assignment(n, vi(m, -1));
    ll ans = 0;

    int round = 1;
    while (round <= k) {
        vll a(n);
        for (int i = 0; i < n; i += 2) {
            a[i] = tickets[i][lo[i]];
            a[i + 1] = tickets[i + 1][hi[i]];
        }
        vll b(n);
        for (int i = 0; i < n; i += 2) {
            b[i] = tickets[i][hi[i]];
            b[i + 1] = tickets[i + 1][lo[i]];
        }

        sort(a.begin(), a.end());
        sort(b.begin(), b.end());

        ll s1 = 0;
        ll s2 = 0;

        rep(i, 0, n) {
            s1 += abs(a[n / 2] - a[i]);
            s2 += abs(b[n / 2] - b[i]);
        }

        if (round == k) {
            if (s1 > s2) {
                for (int i = 0; i < n; i += 2) {
                    assignment[i][lo[i]] = round - 1;
                    assignment[i + 1][hi[i + 1]] = round - 1;
                }
                ans += s1;
            }
            else {
                for (int i = 0; i < n; i += 2) {
                    assignment[i][hi[i]] = round - 1;
                    assignment[i + 1][lo[i + 1]] = round - 1;
                }
                ans += s2;
            }
        }
        else {
            for (int i = 0; i < n; i += 2) {
                assignment[i][lo[i]] = round - 1;
                assignment[i + 1][hi[i + 1]] = round - 1;
            }
            for (int i = 0; i < n; i += 2) {
                assignment[i][hi[i]] = round;
                assignment[i + 1][lo[i + 1]] = round;
            }
            ans += s1 + s2;
        }

        rep(i, 0, n) {
            lo[i]++;
            hi[i]--;
        }

        round += 2;
    }

    allocate_tickets(assignment);
    return ans;
}

/*
int main() {
    cout << find_maximum(2, {{0, 2, 5}, {1, 1, 3}}) << endl;
    cout << find_maximum(1, {{5, 9}, {1, 4}, {3, 6}, {2, 7}}) << endl;
    cout << find_maximum(2, {{3, 5}, {1, 3}, {3, 5}, {1, 3}}) << endl;
    cout << find_maximum(5, {{1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6}, {1, 2, 3, 4, 5, 6}}) << endl;
}*/
# 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 0 ms 204 KB Output is correct
5 Correct 1 ms 288 KB Output is correct
6 Correct 1 ms 716 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 204 KB Output is correct
2 Incorrect 0 ms 204 KB Contestant returned 2429325640 while correct return value is 2727881086.
3 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 0 ms 204 KB Contestant returned 5 while correct return value is 6.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 288 KB Contestant returned 11 while correct return value is 13.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Contestant returned 11 while correct return value is 13.
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 204 KB Contestant returned 11 while correct return value is 13.
2 Halted 0 ms 0 KB -
# 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 0 ms 204 KB Output is correct
5 Correct 1 ms 288 KB Output is correct
6 Correct 1 ms 716 KB Output is correct
7 Correct 0 ms 204 KB Output is correct
8 Incorrect 0 ms 204 KB Contestant returned 2429325640 while correct return value is 2727881086.
9 Halted 0 ms 0 KB -