Submission #1224416

#TimeUsernameProblemLanguageResultExecution timeMemory
1224416PVM_pvmCarnival Tickets (IOI20_tickets)C++20
27 / 100
371 ms51492 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1502
int N,M;
pair<long long, long long> cv[MAXN];
bool cmp(int &a, int &b)
{
    return (cv[a].first+cv[a].second)<(cv[b].first+cv[b].second);
}
long long howm(int koi, bool zap)
{
    int n=N;
    int m=M;
    int ml=1,gol=0;
    vector<int> sm;
    sm.push_back(koi);
    vector<int> gl;
    vector<int> und;
    for (int q=0;q<n;q++)
    {
        if (q==koi) continue;
        if (cv[q].first>cv[koi].first)
        {
            gol++;
            gl.push_back(q);
        }
        else if (cv[q].second<cv[koi].first)
        {
            ml++;
            sm.push_back(q);
        }
        else
        {
            und.push_back(q);
        }
    }
    if (ml>(n/2)) return -1;
    if (gol>(n/2)) return -1;
    sort(und.begin(),und.end(),cmp);
    for (int q=0;q<und.size();q++)
    {
        if (ml==(n/2))
        {
            gl.push_back(und[q]);
            gol++;
        }
        else
        {
            sm.push_back(und[q]);
            ml++;
        }
    }
    long long suma=0;
    long long sto=cv[koi].first;
    for (int q=0;q<sm.size();q++) suma+=sto-cv[ sm[q] ].first;
    for (int q=0;q<gl.size();q++) suma+=cv[ gl[q] ].second-sto;
    if (zap)
    {
        vector<vector<int>> ans;
        for (int q=0;q<n;q++)
        {
            vector<int> ans2;
            ans2.resize(m);
            for (int w=0;w<m;w++) ans2[w]=-1;
            ans.push_back(ans2);
        }
        for (int q=0;q<sm.size();q++)
        {
            ans[ sm[q] ][0]=0;
        }
        for (int q=0;q<gl.size();q++)
        {
            ans[ gl[q] ][m-1]=0;
        }
        allocate_tickets(ans);
    }
    //cout<<sto<<" "<<suma<<"\n";
    return suma;
}
long long find_maximum(int k, vector<vector<int>> x) {
	int n = x.size();
	N=n;
	int m = x[0].size();
	M=m;
	for (int i = 0; i < n; i++) {
        cv[i]={ x[i][0] , x[i][m-1] };
	}
	long long ans=-1;
	int kogo=-1;
    for (int q=0;q<n;q++)
    {
        long long cur=howm(q,0);
        if (cur>ans)
        {
            ans=cur;
            kogo=q;
        }
    }
	return howm(kogo,1);
}
#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...