Submission #1233743

#TimeUsernameProblemLanguageResultExecution timeMemory
1233743CELD_07Carnival Tickets (IOI20_tickets)C++20
27 / 100
582 ms100948 KiB
#include "tickets.h"
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
typedef long long ll;
typedef long double ld;
#define endl "\n"
#define vll vector<ll>
#define sd second
#define ft first
#define all(x) x.begin(),x.end()
#define allr(x) x.rbegin(),x.rend()
#define pll pair<ll, ll>
#define mod 1000000007
#define _set tree<pll, null_type, less<pll>, rb_tree_tag, tree_order_statistics_node_update>
#define inf (ll)1e15
#define db(x) cout<<#x<<" : "<<x<<endl;
#define PRESICION(x) cout.setf(ios::fixed,ios::floatfield); cout.precision(x);
using namespace std;
using namespace __gnu_pbds;
ll dx[]={1, -1, 0, 0};
ll dy[]={0, 0, 1, -1};
inline ll sm(ll a, ll b){
return ((a%mod)+(b%mod))%mod;
}
inline ll ml(ll a, ll b){
return ((a%mod)*(b%mod))%mod;
}
inline ll rs(ll a, ll b){
return ((a%mod)-(b%mod)+mod)%mod;
}
ll bpow(ll a , ll b) {
if (b==0)return 1;
if (b%2!=0)return ((bpow(a, b-1)%mod)*(a%mod))%mod;
ll r=bpow (a ,b/ 2) ;
return ((r%mod)*(r%mod))%mod;
}
long long find_maximum(int k, std::vector<std::vector<int>> x) {
	int n = x.size();
	int m = x[0].size();
	ll res1=0;
    vector<vector<int>> res(n, vector<int>(m, -1));
    vector<ll>v3(n, 0);
    vector<vector<pair<ll, ll>>> v(n), v1(n);
    priority_queue<tuple<ll, ll, ll, ll>> pq1;
    for(int i=0; i<n; i++){
    for(int j=0; j<k; j++){
    v[i].push_back({x[i][j], j});
    res1-=x[i][j];
    }
    for(int j=m-k; j<m; j++){
    v1[i].push_back({x[i][j], j});
    }
    }
    for(int i=0; i<k; i++){
    priority_queue<tuple<ll, ll, ll, ll>>().swap(pq1);
    for(int j=0; j<n; j++){
    pq1.push({v[j].back().ft+v1[j].back().ft, v[j].back().sd, v1[j].back().sd, j});
    }
    map<ll, bool> v2;
    for(int j=0; j<n/2; j++){
    ll o, o1, o2, o3;
    tie(o, o1, o2, o3)=pq1.top();
    pq1.pop();
    res1+=o;
    v2[o3]=1;
    v[o3].pop_back();
    v1[o3].pop_back();
    //cout<<o<<" "<<o1<<" "<<o2<<" "<<o3<<endl;
    res[o3][o2]=i;
    }
    for(int j=0; j<n; j++){
    if(v2[j])continue;
    res[j][v3[j]]=i;
    v3[j]++;
    }
    }
	allocate_tickets(res);
	/*for(int i=0; i<n; i++){
	for(int j=0; j<m; j++){
	cout<<res[i][j]<<" ";
	}
	cout<<endl;
	}*/
	return res1;
}/*
int main(){
cout<<find_maximum(1, {{9}, {4}, {6}, {7}})<<endl;
}
*/
#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...