Submission #1354823

#TimeUsernameProblemLanguageResultExecution timeMemory
1354823coderg300711Carnival Tickets (IOI20_tickets)C++20
100 / 100
277 ms54392 KiB
#include "bits/stdc++.h"
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pii pair<int,int>
#define yes cout<<"YES\n"
#define no cout<<"NO\n"
#define pb push_back
#define sz(x) (int)(x).size()
#define rsz resize
#define ass assign
#define F(i,l,r) for(int i=(l);i<(r);++i)
typedef long long ll;
typedef unsigned long long ull;
typedef long double lld;
//template<typename T> using pqg = priority_queue<T, vector<T>, greater<T>>;
#define each(a,x) for(auto a:x)
#define FOR(i,a) for(int i=0;i<(a);i++)
#define ROF(i,a,b) for(int i=(b)-1;i>=(a);i--)
#define eb emplace_back
#define ft front()
#define V vector

#ifndef ONLINE_JUDGE
#define debug(x) cerr << #x <<" "; _print(x); cerr << endl;
#else
#define debug(x)
#endif

void _print(ll t) {cerr << t;}
void _print(int t) {cerr << t;}
void _print(string t) {cerr << t;}
void _print(char t) {cerr << t;}
void _print(lld t) {cerr << t;}
void _print(double t) {cerr << t;}
void _print(ull t) {cerr << t;}

template <class T, class V> void _print(pair <T, V> p);
template <class T> void _print(vector <T> v);
template <class T> void _print(set <T> v);
template <class T, class V> void _print(map <T, V> v);
template <class T> void _print(multiset <T> v);
template <class T, class V> void _print(pair <T, V> p) {cerr << "{"; _print(p.ff); cerr << ","; _print(p.ss); cerr << "}";}
template <class T> void _print(vector <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(set <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T> void _print(multiset <T> v) {cerr << "[ "; for (T i : v) {_print(i); cerr << " ";} cerr << "]";}
template <class T, class V> void _print(map <T, V> v) {cerr << "[ "; for (auto i : v) {_print(i); cerr << " ";} cerr << "]";}

#include "tickets.h"

ll find_maximum(int k,V<V<int>> x){
	int n=sz(x),m=sz(x[0]);
    V<int> p(n,0);
    ll res=0;
    FOR(i,n){
    	FOR(j,k)res-=x[i][j];
    }
    priority_queue<pair<ll,int>> pq;
    FOR(i,n)pq.push({(ll)x[i][m-1]+x[i][k-1],i});
    FOR(i,(k*n)/2){
    	pair<ll,int> u=pq.top();
    	pq.pop();
    	res+=u.fi;
    	p[u.se]++;
    	if(p[u.se]<k)pq.push({(ll)x[u.se][m-1-p[u.se]]+x[u.se][k-1-p[u.se]],u.se});
    }
    V<V<int>> s(n,V<int>(m,-1));
    int cnt=0;
    FOR(i,n){
    	FOR(j,p[i]){
    		s[i][m-1-j]=cnt%k;
    		cnt++;
    	}
    }
    FOR(i,n){
    	V<bool> used(k,0);
    	FOR(j,m){
    		if(!(!(~s[i][j])))used[s[i][j]]=1;
    	}
    	int id=0;
    	FOR(r,k){
    		if(!used[r])s[i][id++]=r;
    	}
    }
    allocate_tickets(s);
    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...