Submission #1239621

#TimeUsernameProblemLanguageResultExecution timeMemory
1239621Muhammad_AneeqCarnival Tickets (IOI20_tickets)C++17
0 / 100
317 ms52880 KiB
#include "tickets.h"
#include <vector>
#include <queue>
#include <iostream>
#include <algorithm>
using namespace std;
#define ll long long
int const N=1510;
ll mul(ll a,ll b)
{
	return a*b;
}
long long find_maximum(int k, vector<vector<int>> a) {
	int n = a.size();
	int m = a[0].size();
	long long ans=0;
	int l[n],r[n];
	int pos[n]={};
	int vl[n]={};
	for (int i=0;i<n;i++)
		l[i]=0,r[i]=m-1;
	vector<pair<ll,int>>pq;
	vector<vector<int>>ret(n,vector<int>(m,-1));
	int sz=n/2;
	for (int index=0;index<k;index++)
	{
		pq={};
		ll sm=0;
		for (int i=0;i<n;i++)
			sm+=a[i][r[i]];
		ll temp=ans;
		ans=0;
		ll ind1=0;
		ll cur=0;
		for (int j=0;j<n;j++)
			pq.push_back({a[j][l[j]]+a[j][r[j]],j});
		sort(begin(pq),end(pq));
		for (int j=0;j<n;j++)
		{
			vl[pq[j].second]=j;
			if (j<sz-1)
				cur+=pq[j].first;		
		}
		for (int i=0;i<n;i++)
		{
			sm-=a[i][r[i]];
			if (vl[i]<sz-1)
			{
				cur-=pq[vl[i]].first;
				cur+=pq[sz-1].first;
			}
			int ind=-1;
			for (int j:{l[i],r[i]})
			{
				ll an=sm-mul(a[i][j],n-1)-(cur-mul(2,mul(sz-1,a[i][j])));
				if (an>=ans)
				{
					ans=an;
					ind=j;
				}
			}	
			if (ind!=-1)
				ind1=i;
			sm+=a[i][r[i]];
			if (vl[i]<sz-1)
			{
				cur+=pq[vl[i]].first;
				cur-=pq[sz-1].first;
			}
		}
		{
			sm-=a[ind1][r[ind1]];
			if (vl[ind1]<sz-1)
			{
				cur+=pq[vl[ind1]].first;
				cur-=pq[sz-1].first;
			}
			int ind=-1;
			for (int j:{l[ind1],r[ind1]})
			{
				ll an=sm-mul(a[ind1][j],n-1)-(cur-mul(2,mul(sz-1,a[ind1][j])));
				if (an>=ans)
				{
					ans=an;
					ind=j;
				}
			}
			for (int j=0;j<n;j++)
				pos[j]=1;
			if (l[ind1]==ind)
				pos[ind1]=0;
			else
				pos[ind1]=1;
			for (int j=0;j<sz-1+(vl[ind1]<sz-1);j++)
			{
				if (vl[ind1]==j) continue;
				pos[pq[j].second]=0;
			}
		}
		ans=temp+ans;
		for (int j=0;j<n;j++)
		{
			if (pos[j])
			{
				ret[j][r[j]]=index;
				r[j]--;
			}
			else
			{
				ret[j][l[j]]=index;
				l[j]++;
			}
		}
	}
	allocate_tickets(ret);
	return ans;
}
#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...