제출 #875447

#제출 시각아이디문제언어결과실행 시간메모리
875447gutzzyHotel (CEOI11_hot)C++17
10 / 100
4062 ms8580 KiB
#include <bits/stdc++.h> using namespace std; int n,m,o,profit; pair<int,int> best_room(vector<pair<int,int>> &rooms, pair<int,int> of, vector<bool> &used){ int bestr = -1; int bestp = 1e9 + 7; for(int i=0;i<n;i++){ if(used[i]) continue; pair<int,int> room = rooms[i]; if(room.second>=of.second and room.first<=bestp){ if(room.first<bestp or bestr==-1){ bestp = room.first; bestr = i; } else{ if(room.second<rooms[bestr].second){ bestp = room.first; bestr = i; } } } } return {of.first-bestp,bestr}; } int main(){ profit = 0; cin >> n >> m >> o; vector<pair<int,int>> rooms(n); vector<bool> used(n, false); vector<pair<int,int>> ofertas(m); for(int i=0;i<n;i++) cin >> rooms[i].first >> rooms[i].second; for(int i=0;i<m;i++) cin >> ofertas[i].first >> ofertas[i].second; priority_queue<pair<pair<int,int>,int>> pq; for(int xx=0;xx<m;xx++){ pair<int,int> of = ofertas[xx]; pq.push({best_room(rooms, of, used),xx}); } while(o>0 and !pq.empty()){ pair<pair<int,int>,int> p = pq.top(); pq.pop(); if(p.first.second==-1 or p.first.first<=0) continue; //cout << p.first.first << " " << p.first.second << " " << p.second << endl; if(used[p.first.second]){ pq.push({best_room(rooms,ofertas[p.second], used),p.second}); } else{ profit += p.first.first; used[p.first.second] = true; } o--; } cout << profit << endl; return 0; }
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...