ABC 051A – Haiku
問題
イルカは、新年に長さ 19の文字列 sを受け取りました。
文字列 ss の形式は [英小文字 \(5\) 文字],[英小文字 \(7\) 文字],[英小文字 \(5\) 文字]
で表されます。
イルカは、カンマで区切られた文字列 ss を、スペースで区切られた文字列に変換したいと思っています。
イルカの代わりに、この処理を行うプログラムを作ってください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
regex e(",");
cout << regex_replace(s, e, " ") << endl;
}
正規表現を用いるために新しい要素が出てきました。
regex
正規表現に関するクラス・関数を定義するヘッダです。この場合、カンマ(,)を検知しています。
regex_replace関数
regex_replace(文字列, 正規表現, 置き換える文字列)という形で使います。
文字列を正規表現を使って、置き換えた結果を取得することができます
ABC 052A – Two Rectangles
問題
二つの長方形があります。 一つ目の長方形は、縦の辺の長さがA、横の辺の長さがBです。 二つ目の長方形は、縦の辺の長さがC、横の辺の長さがDです。
この二つの長方形のうち、面積の大きい方の面積を出力してください。 なお、二つの長方形の面積が等しい時は、その面積を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c, d;
cin >> a >> b >> c >> d;
int first_area = a * b;
int second_area = c * d;
if (first_area >= second_area){
cout << first_area << endl;
}
else {
cout << second_area << endl;
}
}
if文の1個目の条件のところを>=と書いておくといいですね。
ABC 053A – ABC/ARC
問題
すめけくんは現在のレートが 1200未満ならば AtCoder Beginner Contest (ABC) に、そうでなければ AtCoder Regular Contest (ARC) に参加することにしました。 すめけくんの現在のレート xが与えられます。すめけくんが参加するコンテストが ABC ならば ABC
と、そうでなければ ARC
と出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int x;
cin >> x;
if (x < 1200){
cout << "ABC" << endl;
}
else {
cout << "ARC" << endl;
}
}
xが1200未満なら”ABC”をそれ以外は”ARC”を出力すればいいですね。
ABC 054A – One Card Poker
問題
AliceとBobは、2人で1枚ポーカーを行います。
1枚ポーカーは、トランプを用いて行う2人ゲームです。
今回使用するトランプでは、各カードに 1
から 13
までの数が書かれています。
カードの強さは、カードに書かれている数で決まり,強さの基準は以下の通りです。
弱 2
<<3
<<4
<<5
<<6
<<7
<<8
<<9
<<10
<<11
<<12
<<13
<<1
強
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if (a == 1){
a = 14;
}
if (b == 1){
b = 14;
}
if (a > b){
cout << "Alice" << endl;
}
else if (a < b){
cout << "Bob" << endl;
}
else {
cout << "Draw" << endl;
}
}
aとbが1の時は、14に変換してから、aとbの大きさを比べて結果を出力してます。
ABC 055A – Restaurant
問題
すぬけくんはレストランに通うのが好きです。すぬけくん行きつけのレストランは何を食べても 1食 800で、15食食べる毎にその場で200円もらえます。
すぬけくんは今までで合計N食食べました。 今までに払った金額をx円、レストランからもらった金額をy円として、x−yを求めなさい。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
int survice = n / 15;
int price = n * 800 - survice * 200;
cout << price << endl;
}
survice = n / 15というところで、値引き量を求めています。
ABC 056A – Honest Or Dishonest
シカのAtCoDeerくんとTopCoDeerくんが「正直者か嘘つきか」ゲームをしています。 このゲームでは、正直者は常にほんとうのことを言い、嘘つきは常に嘘を言います。 文字aとbが入力として与えられます。これらはそれぞれ H
か D
のどちらかです。
a=H
のとき、AtCoDeerくんは正直者です。a=D
のとき、AtCoDeerくんは嘘つきです。b=H
のとき、AtCoDeerくんは「TopCoDeerくんは正直者だ」と発言しています。b=D
のとき、AtCoDeerくんは「TopCoDeerくんは嘘つきだ」と発言しています。
これらから判断して、TopCoDeerくんが正直者かどうか判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string a, b;
cin >> a >> b;
if (a == b){
cout << "H" << endl;
}
else {
cout << "D" << endl;
}
}
aとbが等しい時は”H”をaとbが異なる時は”D”を出力すれば良いですね。
ABC 057A – Remaining Time
イルカはプログラミングコンテスト好きで、今日はAtCoderのコンテストに参加します。
現在時刻は、24時間表記 (0:00〜23:59)で A時ちょうどであり、コンテストがちょうど B時間後に始まります。
コンテストの開始時刻は、24時間表記で何時ちょうどでしょうか?
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
int time = a + b;
cout << time % 24 << endl;
}
時刻は24で割った余りを出力するようにすると、24時間表記で出力できます。
例えば、25時になった場合、25%24=1となります。
ABC 058A – ι⊥l
3本の柱が等間隔に並んでいます。柱の高さは左から順に aメートル, bメートル, cメートル です。 柱の先端が同一直線上に並んでいる時、つまりb−a=c−bを満たしているとき、 この柱の並び方を美しいと呼びます。
柱の並び方が美しいかどうかを判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (b - a == c - b){
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
問題文の通り、b – a = c – bの時は”YES”、そうでない時は”NO”を出力すればいいですね。
ABC 059A – Three-letter acronym
問題
英小文字からなる3つの単語s1,s2,s3が空白区切りで与えられるので、単語の先頭の文字をつなげ、大文字にした略語を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b >> c;
cout << (char)toupper(a[0]) << (char)toupper(b[0]) << (char)toupper(c[0]) << endl;
}
大文字に変換するために新たな関数がでてきました。
toupper関数
文字を大文字化します。(char)をつけてあげないと数字になってしまいます。