제출 #1071548

#제출 시각아이디문제언어결과실행 시간메모리
1071548IgnutCarnival Tickets (IOI20_tickets)C++17
0 / 100
298 ms69324 KiB
// Ignut #include <bits/stdc++.h> using namespace std; using ll = long long; const int INF = 1e9 + 123; void allocate_tickets(vector<vector<int>> s); ll find_maximum(int k, vector<vector<int>> x) { int n = x.size(), m = x.front().size(); vector<vector<int>> s; for (int i = 0; i < n; i ++) { s.push_back({}); s.back().assign(m, -1); } ll res = 0; vector<int> pos0[n], pos1[n]; for (int i = 0; i < n; i ++) { for (int j = 0; j < m; j ++) { if (x[i][j] == 0) pos0[i].push_back(j); else pos1[i].push_back(j); } } for (int step = 0; step < k; step ++) { int cnt0 = 0, cnt1 = 0; bool used[n] = {}; for (int i = 0; i < n; i ++) { if (pos0[i].empty()) { cnt1 ++; s[i][pos1[i].back()] = step; pos1[i].pop_back(); used[i] = true; } else if (pos1[i].empty()) { cnt0 ++; s[i][pos0[i].back()] = step; pos0[i].pop_back(); used[i] = true; } } for (int i = 0; i < n; i ++) { if (used[i]) continue; if (cnt0 < cnt1) { cnt0 ++; s[i][pos0[i].back()] = step; pos0[i].pop_back(); } else { cnt1 ++; s[i][pos1[i].back()] = step; pos1[i].pop_back(); } } res += min(cnt0, cnt1); } 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...