제출 #1209855

#제출 시각아이디문제언어결과실행 시간메모리
1209855simona1230카니발 티켓 (IOI20_tickets)C++20
25 / 100
864 ms101860 KiB
#include "tickets.h"
#include <vector>
#include <bits/stdc++.h>
using namespace std;

int a[1501][1501];
bool cmp(pair<int,int> p1,pair<int,int> p2)
{
    return a[p1.first][p1.second]<a[p2.first][p2.second];
}

long long find_maximum(int k, std::vector<std::vector<int>> x)
{
    vector<long long> all;
    vector<vector<int> > t=x;
    vector<pair<int,int> > v;
    for(int i=0;i<x.size();i++)
    {
        for(int j=0;j<x[i].size();j++)
        {
            a[i][j]=x[i][j];
            all.push_back(x[i][j]);
            v.push_back({i,j});
        }
    }
    sort(all.begin(),all.end());
    sort(v.begin(),v.end(),cmp);

    vector<int> s[1501],b[1501];
    long long sum=0;
    for(int i=0;i<all.size();i++)
    {
        if(i<all.size()/2)s[v[i].first].push_back(v[i].second),sum-=all[i];
        else b[v[i].first].push_back(v[i].second),sum+=all[i];
    }

    pair<int,int> p[1501];
    for(int i=0;i<x[0].size();i++)
        p[i].first=0,p[i].second=i;
    for(int i=0;i<x.size();i++)
    {
        sort(p,p+x[0].size());
        for(int j=0;j<s[i].size();j++)
        {
            t[i][s[i][j]]=p[j].second;
            p[j].first++;
        }

        for(int j=0;j<b[i].size();j++)
        {
            t[i][b[i][j]]=p[j+s[i].size()].second;
        }
    }

    allocate_tickets(t);

    return sum;
}
#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...