LoginSignup
0
0

More than 1 year has passed since last update.

AtCoderログ:0038 - ABC 211 B

Last updated at Posted at 2021-07-26

問題

問題文

$4$ つの文字列 $S_1,S_2,S_3,S_4$ が与えられます。
この中に、H , 2B , 3B , HR がそれぞれ $1$ つずつあるか判定してください。
ただし、全ての $S_i$ は H , 2B , 3B , HR のいずれかと一致します。

制約

・$S_i$ は H , 2B , 3B , HR のいずれかと一致する

回答

回答1 (AC)

4つの文字列 s.at(0), s.at(1), s.at(2), s.at(3) に H, 2B, 3B, HR がそれぞれ 1 つずつあるための条件は、全ての文字列が異なっていること、つまり s.at(0)!=s.at(1) かつ s.at(0)!=s.at(2) かつ s.at(0)!=s.at(3) かつ s.at(1)!=s.at(2) かつ s.at(1)!=s.at(3) かつ s.at(2)!=s.at(3) が成立することです。これを書き下したコードは以下のようになります。

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

int main() {
  vector<string> s(4);
  for ( int i=0; i<4; i++ ) {
    cin >> s.at(i);
  }

  if ( s.at(0)!=s.at(1) && s.at(0)!=s.at(2) && s.at(0)!=s.at(3) &&
       s.at(1)!=s.at(2) && s.at(1)!=s.at(3) && s.at(2)!=s.at(3) ) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }  
}

回答2 (AC)

重複の可能性がある要素の(個数ではなく)種類の数をカウントする場合には、set 型変数を使うのが便利です。set 型変数 result を用意して文字列を追加し、その要素数が 4 ならば全ての要素が異なっていることがわかります。コードは以下のようになりました。

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

int main() {
  string s;
  set<string> result;
  for ( int i=0; i<4; i++ ) {
    cin >> s;
    result.insert(s);
  }

  if ( (int)result.size()==4 ) {
    cout << "Yes" << endl;
  } else {
    cout << "No" << endl;
  }  
}

調べたこと

AtCoder の解説公式解説

回答1と同じ方針でしたが、全ての条件を書き下さず、for 文を使って処理していました。

リンク

0
0
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
0
0