はまやんはまやんはまやん

hamayanhamayan's blog

明太子 [yukicoder No.647]

https://yukicoder.me/problems/no/647

解法

https://yukicoder.me/submissions/235193

各明太子について、買ったメンバーの数を数えよう。
「cnt[m] := m番目の明太子を買ったメンバーの数」
最後にcntが最大のものを取ってきて答える。

int N, A[10101], B[10101], M, X[1010], Y[1010];
int cnt[1010];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 0, N) cin >> A[i] >> B[i];
    cin >> M;
    rep(i, 0, M) cin >> X[i] >> Y[i];

    rep(m, 0, M) rep(i, 0, N) if (X[m] <= A[i] and B[i] <= Y[m]) cnt[m]++;
    vector<int> ans;
    int ma = 0;
    rep(m, 0, M) {
        if (ma == cnt[m]) ans.push_back(m + 1);
        else if (ma < cnt[m]) {
            ans.clear();
            ans.push_back(m + 1);
            ma = cnt[m];
        }
    }

    int n = ans.size();
    if (ma == 0) {
        printf("0\n");
        return;
    }

    rep(i, 0, n) printf("%d\n", ans[i]);
}