AtCoderのCounting RoadsをC++で解いてみた

AtCoder

こんにちは! mnbd(@mnbbbbbd)です。

AtCoder Beginner ContestのCounting Roadsの問題文が理解できなくて、
回答もわからないんだけど…

相談者

問題文のご説明と私の回答をお伝えいたします。

本記事では、以下のことを知ることができます。

  • AtCoder Beginner Contest B061 Counting Roadsの問題文の理解の助け
  • C++を用いた私の回答

AtCoder Beginner Contest B061 Counting Roads

問題文

N 個の都市があり、M 本の道路があります。
i(1≦i≦M)i(1≦i≦M) 番目の道路は、都市 ai と 都市 bi (1≦ai,bi≦N)(1≦ai,bi≦N) を双方向に結んでいます。
同じ 2 つの都市を結ぶ道路は、1 本とは限りません。
各都市から他の都市に向けて、何本の道路が伸びているか求めてください。

https://atcoder.jp/contests/abc061/tasks/abc061_b

解説

管理人

アルファベットが出てくるとわかりずらいですよね……。

入力例と出力例を見ると理解できることがあります。

入力例
4 3
1 2
2 3
1 4

  • 1行目 都市の数4 道路の数3
  • 2行目からは、道路がどの都市とどの都市をつないでいるかを表します
    • 2行目 都市番号1 都市番号2
    • 3行目 都市番号2 都市番号3
    • 4行目 都市番号1 都市番号4

出力例
2
2
1
1

各行は、都市番号で、いくつ道路があるかを表しています。

私の回答

#include <bits/stdc++.h>
using namespace std;
int main() {
    int N, M;
    cin >> N >> M;

    vector<int> count(N);

    for (int i = 0; i < M; i++) {
        int a, b;
        cin >> a >> b;
        count.at(a - 1)++;
        count.at(b - 1)++;
    }

    for (int i = 0; i < N; i++) {
        cout << count.at(i) << endl;
    }
}

学んだこと

C++入門 AtCoder Programming Guide for beginners (APG4b)から始めた場合、この問題に行くつくということは、配列を学んだばかりの状態です。

私の場合、この練習問題に関しては、配列の操作よりも問題文の理解ができませんでした。

これは、プログラミング以前の国語力、読解力の問題ということを痛感しています。

まとめ

AtCoder Beginner Contest 061 B – Counting Roadsについてご説明させていただきました。

プログラミングの勉強を始めたばかりですが、よかったTwitterでつながってください!
@mnbbbbbd

以上です。
読んでいただきありがとうございました!