思考する三角形▽

プログラミング初心者によるAtCoder解答解説

B - Two Colors Card Game

コメント歓迎です。

今回はmapを使って解きました。


方針

今回の問題で初めてmapを使いました。


mapは2つの情報を関連付けて記録できます。


今回はカードに書かれた文字列とその登場回数を関連付けて記録しました。


同じ文字列が出てくるたびに関連付けている登場回数を+1します。


コード(AC)

#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;

int main() {
  // 入力
  int N;
  cin >> N;

  string tmp;

  unordered_map<string, int> s;
  for (int i = 0; i < N; i++) {
    cin >> tmp;
    // 入力をmap sに登録
    // 登録されるたびmap値を+1
    // 同じ文字列が登録された場合はmap値が増加
    s[tmp]++;
  }

  // 上と同様の処理
  int M;
  cin >> M;

  unordered_map<string, int> t;
  for (int i = 0; i < M; i++) {
    cin >> tmp;
    t[tmp]++;
  }
  // sに登録されている文字列をfor文で繰り返し処理
  int ans = 0;
  for (auto& d : s) {
    // 青カードと赤カードに登録された回数から貰える金額を計算
    ans = max(ans, d.second - t[d.first]);
  }

  // 出力
  cout << ans << endl;
  return 0;
}