1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

AtCoderログ:0104 - ABC 217 B

Last updated at Posted at 2021-09-07

問題

問題文

AtCoder では現在、 ABC , ARC , AGC , AHC の 4 つのコンテストが定期的に開催されています。
AtCoder で現在定期的に開催されているコンテストは $S_1, S_2, S_3$ とあと 1 つは何ですか?

制約

・$S_1, S_2, S_3$ はそれぞれ、ABC, ARC, AGC, AHC のいずれかである。
・$S_1, S_2, S_3$ は相異なる。

回答

回答1 (AC)

4 つのコンテストの名称をリストに記憶し、コンテスト名を読み込むごとに何番目の要素と等しいかをチェック、別の配列にその情報を保存していけば良いでしょう。4x4=16回の繰り返しが必要ですが、全く問題のない回数です。コードは以下のようになりました。

abc217b-1.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
  vector<string> contest = { "ABC", "ARC", "AGC", "AHC" };
  vector<int>    found(4,0);
  string s;
  for ( int i=0; i<3; i++ ) {
    cin >> s;
    for ( int j=0; j<4; j++ ) {
      if ( s==contest.at(j) ) {
        found.at(j) = 1;
      }
    }
  }

  for ( int j=0; j<4; j++ ) {
    if ( found.at(j)==0 ) {
      cout << contest.at(j) << endl;
    }
  }
}

回答2 (AC)

回答1の場合、コンテストの個数が増えると繰返し回数が膨大になってしまいます。そこで考え方を逆転し、コンテスト名を読み込むごとに最初のリストから削除していくことにします。こうすることで、最後に残ったコンテスト名が答えとなります。コードは以下のようになりました。

abc217b-2.cpp
#include <bits/stdc++.h>
using namespace std;

int main() {
  set<string> contest = { "ABC", "ARC", "AGC", "AHC" };
  string s;

  for ( int i=0; i<3; i++ ) {
    cin >> s;
    contest.erase(s);
  }

  for ( auto itr = contest.begin(); itr != contest.end(); ++itr ) {
    cout << *itr;
  }
}

調べたこと

AtCoder の解説公式解説

回答1と同じ方針でした。

リンク

前後の記事

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?