問題概要
競技プログラミングの出題サイト yurucoder では問題ごとにレベルが設定されています。
問題のレベルはユーザーからアンケートを取り以下のルールで決められます。
$N$人のユーザーは問題のレベルをそれぞれ $L_i$ として評価する。 $(1≤i≤N)$
多数決を取り、最もユーザーからの回答が多いレベルをその問題のレベルとする。
最も多い回答を得たものが複数ある場合は、よりレベルの高い方を採用する。
このルールに従い、ユーザーから得た評価から問題のレベルを求めてください。
$N\leqq10^5$、$L_i\leqq6$
解法
PIIのmax.minでidも管理すると楽。
計算量:$O(N)$
ソース
#include <bits/stdc++.h> using namespace std; using VS = vector<string>; using LL = long long; using VI = vector<int>; using VVI = vector<VI>; using PII = pair<int, int>; using PLL = pair<LL, LL>; #define FOR(i, s, e) for (int(i) = (s); (i) < (e); (i)++) int main() { cin.tie(0); ios_base::sync_with_stdio(false); int N; cin >> N; VI L(7, 0); FOR(i, 0, N) { int a; cin >> a; L[a]++; } PII Max = PII(-1, -1); FOR(i, 1, 7) { Max = max(Max, PII(L[i], i)); } int ans = Max.second; cout << ans << "\n"; return 0; }