ABC 060A – Shiritori
問題
文字列 A, B, Cが与えられます。これがしりとりになっているか判定してください。
- Aの最後の文字とBの最初の文字が同じ
- Bの最後の文字とCの最初の文字が同じ
この2つが正しいか判定してください。
両方とも正しいならば YES
、そうでないならば NO
を出力してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
string a, b, c;
cin >> a >> b >> c;
if (a[a.size() - 1] == b[0] && b[b.size() - 1] == c[0]){
cout << "YES" << endl;
}
else {
cout << "NO" << endl;
}
}
文字列の最後の文字を取得したい時は、a[a.size() – 1]で求められます。
ABC 061A – Between Two Integers
問題
3つの整数 A,B,Cが与えられます。
整数 CがA以上 かつ B以下であるかを判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a <= c && c <= b){
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
問題文の通りですね。
ABC 062A – Grouping
問題
すぬけ君は、1から12までの整数を下図のようにグループ分けしました。 整数x, y(1≤x<y≤12) が与えられるので、x,yが同一のグループに属しているか判定してください。
自分の回答
#include <bits/stdc++.h>
using namespace std;
int main() {
int x, y;
cin >> x >> y;
string x_group, y_group;
if (x == 1 || x == 3 || x == 5 || x == 7 || x == 8 || x == 10 || x == 12){
x_group = "a";
}
else if (x == 4 || x == 6 || x == 9 || x == 11){
x_group = "b";
}
if (y == 1 || y == 3 || y == 5 || y == 7 || y == 8 || y == 10 || y == 12){
y_group = "a";
}
else if (y == 4 || y == 6 || y == 9 || y == 11){
y_group = "b";
}
if (x == y || x_group == y_group){
cout << "Yes" << endl;
}
else {
cout << "No" << endl;
}
}
とても解くのに時間がかかってしまいました。rubyのinclude?メソッドのように、配列に要素が含まれるかどうかを簡単に確かめる方法があれば、楽にできたのですが、C++にはそれにあたるものがないみたい?find関数も文字列にしか使えませんし、、、。
結局、ゴリ押しで解いてしまいました。無念。
xとyの値が等しい時は、どのグループに属しているか判別するは必要なく、”Yes”を出力すれば良いです。なので、2だけのグループに属するかどうかは判別する必要はありません。