제출 #1239521

#제출 시각아이디문제언어결과실행 시간메모리
1239521Muhammad_Aneeq카니발 티켓 (IOI20_tickets)C++17
27 / 100
377 ms51308 KiB
#include "tickets.h"
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
#define ll long long
int const N=1510;
long long dp[N]={};
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,sm=0;
	priority_queue<pair<ll,ll>>pq;
	int pos[n]={};
	for (int i=0;i<n;i++)
		sm+=a[i][m-1];
	int sz=n/2;
	for (int i=0;i<n;i++)
	{
		pq={};
		sm-=a[i][m-1];
		ll cur=0;
		for (int j=0;j<n;j++)
		{
			if (j==i) continue;
			pq.push({a[j][0]+a[j][m-1],j});
			cur+=a[j][0]+a[j][m-1];
			if (pq.size()>=sz)
			{
				cur-=pq.top().first;
				pq.pop();
			}
		}
		int ind=-1;
		for (int j=0;j<m;j++)
		{
			ll an=sm-mul(a[i][j],n-1)-(cur-mul(2,mul(sz-1,a[i][j])));
			if (an>ans)
			{
				// cout<<i<<' '<<j<<endl;
				ans=an;
				ind=j;
			}
		}	
		if (ind!=-1)
		{
			for (int j=0;j<n;j++)
				pos[j]=m-1;
			pos[i]=ind;
			while (pq.size())
			{
				pos[pq.top().second]=0;
				pq.pop();
			}
		}
		sm+=a[i][m-1];
	}
	vector<vector<int>>ret(n,vector<int>(m,-1));
	for (int j=0;j<n;j++)
		ret[j][pos[j]]=0;
	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...