白駿1931:会議室を手配する.cpp



<ソース>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(){
    int n;
    cin >> n;
    int begin[n]; int end[n];
    vector<pair<int,int>> order;
    for(int i = 0; i < n; i++){
        cin >> begin[i] >> end[i];
    }
    for(int i = 0; i < n; i++){
        order.push_back(make_pair(end[i],begin[i]));
    }
    sort(order.begin(),order.end());
    int earliest = 0; int selected = 0;
    for(int i = 0; i < n; i++){
        int meetingBegin = order[i].second;
        int meetingEnd = order[i].first;
        if(earliest <= meetingBegin){
            earliest = meetingEnd;
            selected++;
        }
    }
    cout << selected << endl;
    return 0;
}
  • 変数&関数
    int n:会議数
    int begin[n],end[n]:各会議の開始と終了時間
    vector>order:会議の開始時間と終了時間をマッピングするベクトル
    int least:最も早く終了した会議
    int selected:選択した会議の数
    int meetingBegin,meetingEnd:各会議の開始時間と終了時間
  • アルゴリズム
    1)pairを用いて会議開始時間と会議終了時間を組み合わせてベクトルに格納する.
    2)会議終了時間を基準に並べ替えを行う.
    3)会議終了時に最近の会議開始値を見つけ、会議終了時刻に設定する
    4)selectedを出力します.
  • で学んだこと
    1) pair<[type1],[type2]> p
    :使用するデータ型1,2を挿入し、タイプpairクラスpを作成する
    2)p.first,p.secode:1番目のパラメータ、2番目のパラメータ
    3)make pair(変数1,変数2)
    :変数1、変数2のpair
  • を作成する
  • 残念と感じ
    実は本で勉強しているときに見たアルゴリズムなので、簡単に解決できます.グリディアルゴリズムがグリディアルゴリズムであることを意識すると、次の解決は容易なようだ.グリディアルゴリズムが利用可能かどうかを確認します.