【競プロ精進ログ】APG4b編<3-3>

zuka

ついに競技プログラミングを始めました!

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回は3.03.STLのコンテナです。

実装

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
  int N;
  cin >> N;
  vector<int> A(N);
  rep(i, N){
    cin >> A[i];
  }

  // map型のCを宣言
  map<int, int> C;
  // Cに数値を入れていく
  rep(i, N){
    if (C.count(A[i])){
      C[A[i]] ++;
    }
    else{
      C[A[i]] = 1;
    }
  }

  // 最頻値とその出現回数
  int max_value, max_cnt = 0;
  for (int x : A){
    if (max_cnt < C[x]){
      max_cnt = max(max_cnt, C[x]);
      max_value = x;
    }
  }
  cout << max_value << " " << max_cnt << endl;
}

ポイント

今回おさえるべき内容

 連想配列(辞書)mapはある2つの値を紐づけて格納できる

 []でアクセスすると存在しない場合は0で初期化される

 所属判定は.count()で行える

map型はある2つの値をkeyvalueとして紐づけながら格納します。[key]として指定すれば要素にアクセスできますが,もし[key]に紐づく情報が登録されていない場合は0で初期化されてしまいます。意図しない挙動を招きかねないため,注意が必要です。

よく行う操作としては,mapの中にあるデータが格納されているかどうかを判定したいという場面があります。そのときには.count()を利用すれば簡単に所属判定を行うことができます。

map以外にも,queueやstackなどよく利用されるデータ型がSTL(standard template library)には含まれています。#include <bits/stdc++.h> を唱えておけば,それらのデータ型を使えるようになります。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる