ABC049を解いてみた
A問題
入力がa, i, u, e, oならvowel、そうでなければconsonantを出力しました。
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { string str; cin >> str; if(str == "a" || str == "i" || str == "u" || str == "e" || str == "o") cout << "vowel" << endl; else cout << "consonant" << endl; return 0; }
B問題
入力を配列として全部受け取ってから、問題文の数式のように((i+2)/2)-1と行を求めること(配列は0スタートなのでその分ずれる)で実装しました。
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define MOD 1000000007 int main(void) { int h, w; char str[100][100]; string temp = ""; cin >> h >> w; for(int i=0; i<h; i++) { for(int j=0; j<w; j++) { cin >> str[i][j]; } } for(int i=0; i<2*h; i++) { for(int j=0; j<w; j++) { temp += str[((i+2)/2)-1][j]; } cout << temp << endl; temp = ""; } return 0; }
C問題
C++の文字列関係をまだ勉強してなかったので文字列操作について知ってるPythonで実装しました。dreamのあとにer, erase, eraserが来る場合で分けて処理しました。
s = input() flag = 1 i = 0 while i < len(s): if s[i:i+5] == 'dream': if s[i+5:i+10] != "erase" and s[i+5:i+7] == "er": i += 7 elif s[i+5:i+11] == "eraser": i += 11 elif s[i+5:i+10] == "erase": i += 10 else: i += 5 elif s[i:i+6] == "eraser": i += 6 elif s[i:i+5] == "erase": i += 5 else: flag = 0 break if(flag == 1): print("YES") else: print("NO")
D問題
解いた過去問でUnion-Find木の問題があったのに勉強を後回しにしていたらUnion-Findの問題が出てしまってちょっとショック。実装でつまってるので解けたら追記。