제출 #1288948

#제출 시각아이디문제언어결과실행 시간메모리
1288948andreimStove (JOI18_stove)C++20
100 / 100
24 ms3404 KiB
#include <iostream> #include <vector> #include <algorithm> #include <queue> using namespace std; struct Inter { int deb, fin; }; bool comp(const Inter& a, const Inter& b) { if (a.deb == b.deb) return a.fin < b.fin; return a.deb < b.deb; } signed main(void) { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int nbIntervallesPre, nbAllumettes; cin >> nbIntervallesPre >> nbAllumettes; vector<Inter> intervallesPre(nbIntervallesPre); for (int _ = 0; _ < nbIntervallesPre; _++) { cin >> intervallesPre[_].deb; intervallesPre[_].fin = intervallesPre[_].deb + 1; } sort(intervallesPre.begin(), intervallesPre.end(), comp); vector<Inter> intervalles; intervalles.push_back(intervallesPre[0]); for (int i = 1; i < nbIntervallesPre; i++) { if (intervallesPre[i - 1].fin == intervallesPre[i].deb) { intervalles.pop_back(); intervalles.push_back({intervallesPre[i - 1].deb, intervallesPre[i].fin}); intervallesPre[i] = intervalles[i - 1]; } else intervalles.push_back(intervallesPre[i]); } int nbIntervalles = (int)intervalles.size(); priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; for (int i = 1; i < nbIntervalles; i++) pq.push({intervalles[i].fin - intervalles[i - 1].fin, i}); int total = 0; for (int i = 0; i < nbIntervalles - nbAllumettes; i++) { total += intervalles[pq.top().second].deb - intervalles[pq.top().second - 1].fin; pq.pop(); } for (auto inter : intervalles) total += (inter.fin - inter.deb); cout << total << "\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...