Submission #1224455

#TimeUsernameProblemLanguageResultExecution timeMemory
1224455PVM_pvmCarnival Tickets (IOI20_tickets)C++20
14 / 100
296 ms53468 KiB
#include "tickets.h"
#include <bits/stdc++.h>
using namespace std;
#define MAXN 1502
int N,M;
pair<int, int> cv[MAXN];
int cn1[MAXN],cn2[MAXN];
bool cmp(pair<int,int> &a, pair<int,int> &b)
{
    return a.first>b.first;
}
long long find_maximum(int k, vector<vector<int>> x) {
	int n = x.size();
	N=n;
	int m = x[0].size();
	M=m;
	for (int i = 0; i < n; i++) {
        int br=0;
        for (int j=0;j<m;j++)
        {
            if (x[i][j]==0) br++;
        }
        cv[i]={br,i};
        cn1[i]=0;
        cn2[i]=m-1;
	}
    vector<vector<int>> ans;
    for (int q=0;q<n;q++)
    {
        vector<int> ans2;
        ans2.resize(m);
        for (int w=0;w<m;w++) ans2[w]=-1;
        ans.push_back(ans2);
    }
    long long otg=0;
    for (int seg=0;seg<k;seg++)
    {
        sort(cv,cv+n,cmp);
        if (cv[ (n/2)-1 ].first==0)
        {
            ///nqma nuli
            for (int q=0;q<n;q++)
            {
                if (cv[q].first!=0)
                {
                    otg++;
                    cv[q].first--;
                    ans[ cv[q].second ][ cn1[ cv[q].second ] ]=seg;
                    cn1[ cv[q].second ]++;
                }
                else
                {
                    ans[ cv[q].second ][ cn2[ cv[q].second ] ]=seg;
                    cn2[ cv[q].second ]--;
                }
            }
        }
        else if (cv[ n/2 ].first==(m-seg))
        {
            ///nqma edinici
            for (int q=0;q<n;q++)
            {
                if (cv[q].first==(m-seg))
                {
                    cv[q].first--;
                    ans[ cv[q].second ][ cn1[ cv[q].second ] ]=seg;
                    cn1[ cv[q].second ]++;
                }
                else
                {
                    otg++;
                    ans[ cv[q].second ][ cn2[ cv[q].second ] ]=seg;
                    cn2[ cv[q].second ]--;
                }
            }
        }
        else
        {
            ///vsichko tochno
            otg+=n/2;
            for (int q=0;q<(n/2);q++)
            {
                cv[q].first--;
                ans[ cv[q].second ][ cn1[ cv[q].second ] ]=seg;
                cn1[ cv[q].second ]++;
            }
            for (int q=(n/2);q<n;q++)
            {
                ans[ cv[q].second ][ cn2[ cv[q].second ] ]=seg;
                cn2[ cv[q].second ]--;
            }
        }
    }
    allocate_tickets(ans);
    return otg;
}
#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...