C - Roulette 解説 by tatyam

C++20 の Ranges ライブラリを使用した実装

新ジャッジで使えるようになった, C++20 の Ranges ライブラリを使用した実装例です.

https://atcoder.jp/contests/abc314/submissions/44540940

#include <algorithm>
#include <iostream>
#include <ranges>
#include <vector>
using namespace std;

int main() {
    int N;
    cin >> N;
    vector bet(N, vector<int>{});
    for(auto& A : bet) {
        int C;
        cin >> C;
        A.resize(C);
        for(int& a : A) cin >> a;
    }
    int X;
    cin >> X;
    
    auto contains_X = views::iota(0, N) | views::filter([&](int i){ return ranges::count(bet[i], X); });
    if(ranges::empty(contains_X)) {
        cout << "0\n";
        return 0;
    }
    auto min_size = ranges::min(contains_X | views::transform([&](int i){ return bet[i].size(); }));
    auto ans = contains_X | views::filter([&](int i){ return bet[i].size() == min_size; });
    
    cout << ranges::distance(ans) << '\n';
    for(auto i : ans) cout << i + 1 << '\n';
}

投稿日時:
最終更新: