AtCoder が提供しているABC(AtCoder Beginner Contest)329 のA問題をC++とPythonで解いてみました。ABC329は、2023年11月18日21:00に実施されました。
AtCoder の紹介はこちらに、プログラミングの方針はこちらに記事があります。
A問題 Spread(Difficulty : 9)
問題はリンク先をご覧ください。
与えられた文字列の文字を空白区切りで出力します。AtCoder Problems による Difficulty は 9 でした。
解答案
C++ プログラム例(ABC329A)
文字の間に空白を入れて、出力する文字列 result を作ります。以下が、C++プログラムとなります。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
string result = "";
for (int i = 0; i < s.length(); ++i) {
if (i > 0) {
result += " ";
}
result += s[i];
}
cout << result << endl;
return 0;
}
少し技巧的ですが、10行目のように書くことができます。配列の添え字は、i と s.length() – 1 が異なれば0となり ‘ ‘ となります。逆に一致すれば添え字は、1となり改行コード ‘\n’ となります。私は、競技プログラムでは、この方法で書いています。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin >> s;
for (int i = 0; i < s.length(); ++i) {
cout << s[i] << " \n"[i == s.length() - 1];
}
return 0;
}
どちらも AC(Accepted=正しいプログラム)と判定されました。
Python プログラム例(ABC329A)
文字の間に空白を入れて、出力する文字列 result を作りました。C++ と同じです。以下となります。
"""AtCoder Beginner Contest 329 A"""
s = input()
result = ""
for i, ch in enumerate(s):
if i > 0:
result += " "
result += ch
print(result)
Python では、以下の1行で書くことができます。リストに ‘*’ を付けると個々の要素を引数として渡せるようです。
"""AtCoder Beginner Contest 329 A"""
print(*input())
こちらも「AC」と判定されました。
最後に
コンテストABC329は、A問題からD問題とそれ以降の問題の難易度差が大きくなりました。このような場合、わたしの実力では最初の4問を解く速さが重要になるようです。
引き続き ABC の問題を紹介していきます。