제출 #352905

#제출 시각아이디문제언어결과실행 시간메모리
352905Kerim카니발 티켓 (IOI20_tickets)C++17
100 / 100
925 ms54356 KiB
#include "tickets.h"
#include "bits/stdc++.h"
#define MAXN 100009
#define INF 1000000007
#define mp(x,y) make_pair(x,y)
#define all(v) v.begin(),v.end()
#define pb(x) push_back(x)
#define wr cout<<"----------------"<<endl;
#define ppb() pop_back()
#define tr(ii,c) for(__typeof((c).begin()) ii=(c).begin();ii!=(c).end();ii++)
#define ff first
#define ss second
#define my_little_dodge 46
#define debug(x)  cerr<< #x <<" = "<< x<<endl;
using namespace std;

typedef long long ll;
typedef pair<int,int> PII;
template<class T>bool umin(T& a,T b){if(a>b){a=b;return 1;}return 0;}
template<class T>bool umax(T& a,T b){if(a<b){a=b;return 1;}return 0;}
const int N=1502;
int l[N],r[N];
bool cmp(int x,int y){return (l[x]>l[y]);}
long long find_maximum(int k,vector<vector<int> > arr) {
	priority_queue<pair<ll,int> >q;ll res=0;
	int n=arr.size(),m=arr[0].size();vector<int>ind(n);
	vector<vector<int>> answer(n,vector<int>(m,-1));
	for(int i=0;i<n;i++){ind[i]=i;
		for(int j=0;j<k;j++)res-=arr[i][j];
		q.push(mp(arr[i][l[i]=k-1]+arr[i][r[i]=m-1],i));
	}
	for(int i=0;i<n*k/2;i++){
		int ind=q.top().ss;res+=q.top().ff;q.pop();--l[ind];--r[ind];
		if(l[ind]>=0)q.push(mp(arr[ind][l[ind]]+arr[ind][r[ind]],ind));
	}
	while(k--){sort(all(ind),cmp);	
		for(int i=0;i<n/2;i++)answer[ind[i]][l[ind[i]]--]=k;
		for(int i=n/2;i<n;i++)answer[ind[i]][++r[ind[i]]]=k;
	}
	allocate_tickets(answer);
	return res;
}
#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...