引き続き、AtCoderの過去問をC++で解いていきます。ABC 124A – Buttonsから。
ABC 130A – Rounding
問題
X,Aは0以上9以下の整数です。
XがA未満の時0、A以上の時10を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int X, A;
cin >> X >> A;
if(X < A){
cout << 0 << endl;
}else {
cout << 10 << endl;
}
}
問題文の通りですね。
ABC 131A – Biscuit Generator
問題
すぬけ君の管理する研究室の扉にはロックがかかっており、解錠にはセキュリティコードを入力する必要があります。
セキュリティコードは4桁の数字列です。セキュリティコードが「入力しづらい」とは、同じ数字が連続する箇所が存在することを言います。
現在のセキュリティコードSが与えられます。Sが「入力しづらい」なら Bad
を、そうでなければ Good
を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string S;
cin >> S;
int S_before = S.size();
S.erase(unique(S.begin(), S.end()), S.end());
if(S_before == S.size()){
cout << "Good" << endl;
}else {
cout << "Bad" << endl;
}
}
久々のunique関数の出番です。unique関数は“隣接する“重複要素を削除するので、もし、同じ数字が続いたりすると、削除します。なので、unique関数をかける前と後の文字数を比較すれば、いいですね。もし、unique関数をかける前後の文字数が同じなら、同じ数字が連続する箇所が存在しないということなので、”Good”を出力します。
ABC 132A – Fifty-Fifty
問題
長さ4の英大文字からなる文字列Sが与えられます。 Sがちょうど2種類の文字からなり、かつ現れる各文字はちょうど2回ずつ現れているかどうかを判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string S;
cin >> S;
if((count(S.begin(), S.end(), S[0]) == 2)
&& (count(S.begin(), S.end(), S[1]) == 2)
&& (count(S.begin(), S.end(), S[2]) == 2)
&& (count(S.begin(), S.end(), S[3]) == 2)){
cout << "Yes" << endl;
}else {
cout << "No" << endl;
}
}
ゴリ押しです。一文字ずつ、文字数に含まれる個数を確認しています。どの文字も文字列に含まれる数が2なら、条件を満たします。
他の人はsortした後に、1文字目と2文字目が等しい時かつ2文字目と3文字目が等しくないかつ3文字目と4文字目が等しい時という条件で振り分けていますね。そっちの方が、コードはすっきりしてますね。どちらにしても、ifの条件を並べることに変わりはないですけど。
ABC 133A – T or T
問題
私たちはN人で旅行しようとしており、その交通手段として電車とタクシーがあります。
電車を使うと1人あたりA円かかります。
タクシーを使うとN人でB円かかります。
全員の交通費の合計は最小でいくらになるでしょうか。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, A, B;
cin >> N >> A >> B;
cout << min(N * A, B) << endl;
}
電車代(N✖️A)とタクシー代(B)を比較して、低い方を出力すればいいですね。
ABC 134A – Dodecagon
問題
半径aの円に内接する正十二角形の面積は 3a^2であることが知られています。
整数rが与えられるので、半径rの円に内接する正十二角形の面積を求めて下さい。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int r;
cin >> r;
cout << 3 * r * r << endl;
}
3r^2をすればいいだけですね。pow関数を使って、3 * pow(r, 2)と書くこともできます。