Submission #1291722

#TimeUsernameProblemLanguageResultExecution timeMemory
1291722SofiatpcCarnival Tickets (IOI20_tickets)C++20
11 / 100
3 ms836 KiB
#include "tickets.h" #include <bits/stdc++.h> using namespace std; #define fi first #define sc second set< pair<int, pair<int,int>>> st; vector<int> cur; long long find_maximum(int k, vector<vector<int>> x) { int n = x.size(), m = x[0].size(); for(int i = 0; i < k; i++)cur.push_back(0); vector<vector<int>> ans(n); for (int i = 0; i < n; i++) { ans[i].resize(m); for (int j = 0; j < m; j++){ ans[i][j] = -1; st.insert({x[i][j], {i,j}}); } } for(int z = 0; z < k*n/2; z++){ ans[ st.begin()->sc.fi ][ st.begin()->sc.sc ] = -2; st.erase(st.begin()); } long long resp = 0; for (int i = 0; i < n; i++) { int j = 0, kk =0; while(kk < k && j < m){ if(ans[i][j] != -2)j++; else{ if(cur[kk] < n/2){ resp -= x[i][j]; ans[i][j] = kk; cur[kk]++; j++; } kk++; } } } for (int i = 0; i < n; i++) { int j = 0, kk = 0; set<int> st; for(int j = 0; j < m; j++) if(ans[i][j] != -1)st.insert(ans[i][j]); while(kk < k && j < m){ if(ans[i][j] != -1)j++; else if(st.find(kk) != st.end())kk++; else{ if(cur[kk] < n){ resp += x[i][j]; ans[i][j] = kk; cur[kk]++; j++; } kk++; } } } allocate_tickets(ans); return resp; }
#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...