引き続き、AtCoderの過去問をC++で解いていきます。ABC 119A – Still TBDから。
ABC 119A – Still TBD
問題
文字列Sが入力されます。これは、西暦2019年の実在する日付を yyyy/mm/dd
の形式で表したものです。(例えば、2019年4月30日は 2019/04/30
と表されます。)
Sが表す日付が2019年4月30日またはそれ以前ならHeisei
、そうでなければ TBD
と出力するプログラムを書いてください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string S;
cin >> S;
if (S <= "2019/04/30"){
cout << "Heisei" << endl;
}else {
cout << "TBD" << endl;
}
}
日付も文字列で比較することができます。
ABC 120A – Favorite Sound
問題
高橋くんは、自動販売機でジュースを買ったときの音が好きです。
その音は1回A円で聞くことができます。
高橋くんはB円持っていますが、お気に入りの音楽をC回聞くと満足するため、B円で最大C回まで聞けるだけ聞きます。
高橋くんはお気に入りの音を何回聞くことになるでしょうか。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
int music = b / a;
if (music <= c){
cout << music << endl;
}else {
cout << c << endl;
}
}
まずは、持っているお金で何回音楽が聴けるかを求めます。その後、満足する回数cと比べます。
ABC 121A – White Cells
問題
H行W列の白色のマス目があります。
あなたはh個の行とw個の列を選び、選んだ行または列に含まれるマス目を全て黒色で塗りつぶします。
白色のマス目はいくつ残るでしょうか。
なお、残る白色のマス目の数は行や列の選び方によらないことが証明できます。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int H, W, h, w;
cin >> H >> W >> h >> w;
cout << (H - h) * (W -w) << endl;
}
全体の行と列から黒で塗りつぶす文の行と列を引いて、掛け合わせれば答えとなります。
ABC 122A – Double Helix
問題
四種類の塩基 A
, C
, G
, T
が存在し、A
と T
、C
と G
がそれぞれ対になります。
文字bが入力されます。これは A
, C
, G
, T
のいずれかです。塩基bと対になる塩基を表す文字を出力するプログラムを書いてください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string b;
cin >> b;
if (b == "A"){
cout << "T" << endl;
}else if (b == "T"){
cout << "A" << endl;
}else if (b == "C"){
cout << "G" << endl;
}else {
cout << "C" << endl;
}
}
ゴリ押しです。他の人の回答も同じようにしているのが多かったですね。
ABC 123A – Five Antennas
問題
5つのアンテナが一直線上に並んでいます。これらは、西から順にアンテナA,B,C,D,Eと名付けられており、それぞれの座標はa,b,c,d,eです。
2つのアンテナ間の距離がk以下であれば直接通信ができ、kより大きいと直接通信ができません。
さて、直接通信ができないアンテナの組が存在するかどうか判定してください。
ただし、座標pと座標q(p<q)のアンテナ間の距離はq−pであるとします。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d, e, k;
cin >> a >> b >> c >> d >> e >> k;
vector<int> n{a, b, c, d, e};
sort(n.begin(), n.end());
if(n[4] - n[0] <= k){
cout << "Yay!" << endl;
}else {
cout << ":(" << endl;
}
}
沢山数字が与えられますが、結局見ればいいのはa~eの中の最小値と最大値です。最大値と最小値の差とkを比べて、差がk以下なら”Yay!”を、大きかったら”:(“を出力すればいいですね。