結果

問題 No.2796 Small Matryoshka
ユーザー Moss_LocalMoss_Local
提出日時 2024-06-28 21:35:48
言語 C++23(gcc13)
(gcc 13.2.0 + boost 1.83.0)
結果
WA  
実行時間 -
コード長 1,224 bytes
コンパイル時間 1,611 ms
コンパイル使用メモリ 111,352 KB
実行使用メモリ 6,948 KB
最終ジャッジ日時 2024-06-28 21:35:55
合計ジャッジ時間 3,471 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 2 ms
6,944 KB
testcase_02 AC 2 ms
6,944 KB
testcase_03 AC 1 ms
6,944 KB
testcase_04 AC 2 ms
6,940 KB
testcase_05 AC 29 ms
6,940 KB
testcase_06 AC 164 ms
6,940 KB
testcase_07 AC 2 ms
6,944 KB
testcase_08 AC 126 ms
6,940 KB
testcase_09 WA -
testcase_10 WA -
testcase_11 WA -
testcase_12 WA -
testcase_13 WA -
testcase_14 WA -
testcase_15 WA -
testcase_16 WA -
testcase_17 WA -
testcase_18 WA -
testcase_19 WA -
testcase_20 WA -
testcase_21 WA -
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <algorithm>
#include <iostream>
#include <vector>

using namespace std;

struct Matryoshka {
    int r, R;
};

// 外径を基準に昇順でソートするための比較関数
bool compare(const Matryoshka &a, const Matryoshka &b) {
    return a.R < b.R || (a.R == b.R && a.r < b.r);
}

// 最長増加部分列 (LIS) を求めるための関数
int LIS(const vector<int> &seq) {
    vector<int> lis;
    for(int x : seq) {
        auto it = lower_bound(lis.begin(), lis.end(), x);
        if(it == lis.end()) {
            lis.push_back(x);
        } else {
            *it = x;
        }
    }
    return lis.size();
}

int main() {
    int N;
    cin >> N;

    vector<Matryoshka> dolls(N);
    for(int i = 0; i < N; ++i) {
        cin >> dolls[i].r >> dolls[i].R;
    }

    // 外径でソートする
    sort(dolls.begin(), dolls.end(), compare);

    // 内径の配列を作成する
    vector<int> innerDiameters(N);
    for(int i = 0; i < N; ++i) {
        innerDiameters[i] = dolls[i].r;
    }

    // 内径に基づいてLISを求める
    int maxDolls = LIS(innerDiameters);

    // 必要な操作Bの回数
    int operationsB = N - maxDolls;

    cout << operationsB << endl;

    return 0;
}
0