けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 003 B - AtCoderトランプ (6Q, 試験管茶色)

for 文の練習問題

問題概要

長さの等しい 2 つの文字列  S, T が与えられる。

 S, T に含まれる各文字 '@' について、'a', 't', 'c', 'o', 'd', 'e', 'r' のいずれかに置き変えることで、 S, T が一致するようにできるかを判定せよ。

制約

  • [tex 1 \le |S| = |T| \le 10]

考えたこと

for 文を回して、各文字 S[i], T[i] について判定していけばよい。

  • S[i] == T[i] のとき:OK(両方が '@' である場合も含む)
  • S[i], T[i] の片方が '@' で、もう片方の文字が a, t, c, o, d, e, r のいずれかのとき:OK
  • それ以外のとき:NG

という感じでロジックを組めばよい。

コード

#include <bits/stdc++.h>
using namespace std;
set<char> atcoder({'a', 't', 'c', 'o', 'd', 'e', 'r'});

int main() {
    string S, T;
    cin >> S >> T;

    bool res = true;
    for (int i = 0; i < S.size(); i++) {
        if (S[i] == T[i]) continue;
        if (S[i] == '@' && atcoder.count(T[i])) continue;
        if (T[i] == '@' && atcoder.count(S[i])) continue;
        res = false;
    }
    if (res) cout << "You can win" << endl;
    else cout << "You will lose" << endl;
}