Submission #1153453

#TimeUsernameProblemLanguageResultExecution timeMemory
1153453onbertCarnival Tickets (IOI20_tickets)C++20
100 / 100
559 ms84968 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct thing {
    int val, add, mns;
};

long long find_maximum(int32_t k, vector<vector<int32_t>> a) {
	int n = a.size(), m = a[0].size();
	int mid = n/2, cur = 0;
    vector<pair<int,int>> vec[2];
    for (int i=0;i<n;i++) {
        if (i < mid) {
            for (int j=0;j<k;j++) {
                cur -= a[i][j];
                vec[0].push_back({a[i][j] + a[i][j+m-k], i});
            }
        } else {
            for (int j=0;j<k;j++) {
                cur += a[i][j+m-k];
                vec[1].push_back({ - a[i][j] - a[i][j+m-k], i});
                // cout << "Test " << j+m-k << " " << a[i][j+m-k] << endl;
            }
        }
        // cout << i << " " << cur << endl;
    }
    sort(vec[0].rbegin(), vec[0].rend());
    sort(vec[1].rbegin(), vec[1].rend());
    vector<pair<int,int>> freq(n);
    for (int i=0;i<n;i++) {
        if (i < mid) freq[i].first = k;
        else freq[i].first = 0;
        freq[i].second = i;
    }
    // cout << cur << endl;
    for (int i=0;i<n*k/2;i++) {
        if (vec[0][i].first + vec[1][i].first < 0) break;
        cur += vec[0][i].first + vec[1][i].first;
        freq[vec[0][i].second].first--, freq[vec[1][i].second].first++;
        // cout << cur << " " << vec[0][i].first << "." << vec[0][i].second << " " << vec[1][i].first << "." << vec[1][i].second << endl;
    }
    vector<vector<int32_t>> ans(n, vector<int32_t>(m, -1));
    int l[n], r[n];
    for (int i=0;i<n;i++) l[i] = 0, r[i] = m-1;
    for (int i=0;i<k;i++) {
        sort(freq.rbegin(), freq.rend());
        for (int j=0;j<mid;j++) {
            int id = freq[j].second;
            ans[id][l[id]] = i;
            l[id]++;
            freq[j].first--;
        }
        for (int j=mid;j<n;j++) {
            int id = freq[j].second;
            ans[id][r[id]] = i;
            r[id]--;
        }
    }
    allocate_tickets(ans);
    return cur;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...