Official
A - ノートの照合 / Matching of Notes Editorial
by
A - ノートの照合 / Matching of Notes Editorial
by
MMNMM
Editorial for printing
初心者の方へ
- AtCoder をはじめたばかりで何をしたらよいか分からない方は、まずは practice contest の問題A「Welcome to AtCoder」を解いてみてください。基本的な入出力の方法が載っています。
- また、プログラミングコンテストの問題に慣れていない方は、AtCoder Beginners Selection の問題をいくつか解いてみることをおすすめします。
- C++入門 AtCoder Programming Guide for beginners (APG4b) は、競技プログラミングのための C++ 入門用コンテンツです。
- Python入門 AtCoder Programming Guide for beginners (APG4bPython) は、競技プログラミングのための Python 入門用コンテンツです。
この問題では、問題文中の条件を適切に実装し、出力すべき文字列を \(1\) 文字ずつ決めていくことで解くことができます。
条件を整理することで、実装が楽になる場合があります。 出力するべき文字列の \(i\) 文字目 \((1\le i\le N)\) は、次のように表すことができます。 ここで、\(S _ i\) は \(S\) の \(i\) 文字目、\(T _ i\) は \(T\) の \(i\) 文字目を表します。
- \(S _ i=T _ i\) であるか、\(T _ i={}\)
?なら、\(S _ i\) - \(S _ i={}\)
?なら、\(T _ i\) - どちらでもなければ、
!
これを適切に実装することで、この問題に正解することができます。
実装例は以下のようになります。
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
string S, T;
cin >> N >> S >> T;
string ans(N, ' '); // 答えを入れる N 文字の文字列を作る
for (int i = 0; i < N; ++i) {
// S[i], T[i] を見て答えの i 文字目を決める
if (S[i] == T[i] || T[i] == '?') {
ans[i] = S[i];
} else if (S[i] == '?') {
ans[i] = T[i];
} else {
ans[i] = '!';
}
}
// 答えを出力
cout << ans << endl;
cout << (ans.contains('!') ? "Yes" : "No") << endl;
return 0;
}
N = int(input())
S = input()
T = input()
# それぞれの文字を見て答えの i 文字目を決める
ans = ''.join(s if s == t or t == '?' else t if s == '?' else '!' for s, t in zip(S, T))
# 答えを出力
print(ans)
print('Yes' if '!' in ans else 'No')
posted:
last update:
