Submission #307536

#TimeUsernameProblemLanguageResultExecution timeMemory
307536nicolaalexandraCarnival Tickets (IOI20_tickets)C++14
100 / 100
1016 ms54392 KiB
#include <bits/stdc++.h>
#include "tickets.h"
#define DIM 2000
#define INF 2000000000000000000LL
using namespace std;

int n,m;
priority_queue <pair<long long,int> > h;
pair <int,int> poz[DIM],v[DIM];

long long find_maximum (int k, vector<vector<int> > x){
    n = x.size(), m = x[0].size();
    int i,j;
    vector <vector<int> > ans;
    ans.resize(n);
    for (i=0;i<n;i++){
        ans[i].resize(m,-1);
        poz[i] = make_pair (k-1,m-1);
    }

    long long sum = 0;

    /// le pun de la inceput pe primele k cu minus
    for (i=0;i<n;i++)
        for (j=0;j<k;j++){
            sum -= x[i][j];
            //ans[i][j] = j;
        }

    /// vreau sa fac jumatate din minus in plus

    for (i=0;i<n;i++)
        h.push (make_pair(x[i][poz[i].first] + x[i][poz[i].second],i));

    for (i=1;i<=n*k/2;i++){

        sum += h.top().first;
        int idx = h.top().second;
        h.pop();

        poz[idx].first--, poz[idx].second--;
        if (poz[idx].first >= 0)
            h.push (make_pair(x[idx][poz[idx].first] + x[idx][poz[idx].second], idx));

    }

    for (i=0;i<n;i++)
        poz[i].second++;

    for (i=0;i<k;i++){
        /// sortez liniile dupa ultimul element
        for (j=0;j<n;j++)
            v[j] = make_pair (poz[j].first,j);

        sort (v,v+n);

        for (j=0;j<n;j++){
            int idx = v[j].second;
            if (j >= n/2){
                ans[idx][poz[idx].first] = i;
                poz[idx].first--;
            } else {
                ans[idx][poz[idx].second] = i;
                poz[idx].second++;
            }
        }

    }

    allocate_tickets(ans);

    return sum;
}
#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...