ABC始めました 〜今は遠き緑の勲章〜
こんばんは。せのです。
ファイターズの勝利に酔いしれてたらこんな時間になってました。
定時上がり出来たので更新します。
さて、前回のあらすじです。
・ABCのB問題に挑戦
その前にABCとはなんぞやから始めますか。
詳しくはこちら。
AtCoder Beginner Contest 089 - AtCoder
AtCoder Beginner Contest(ABC)とは?
プログラミングには興味あるけど、何をしていいかわからない...
そんな人のためのコンテンツです。
(原文ママ)
つまり「見習いプログラマーはこれでコード書いて知的好奇心を満たせ」ってやつです。
合法SESおじさんは見習いプログラマーにもなれていない感が満載なので、
こうやってひたすらコードを書くしかないのです
そんなわけで今回挑戦した問題はこれ!
難しかったです。結局自力でB問題を解くことは出来ませんでした。
何も理解してないんだな俺ってのを痛感しました。吊ってきます
僕が無い頭フル活用して調べながら必死こいて書いたクソコードがこちらです。
ローカル開発環境で書いたんですが、コンパイルエラーで提出すら出来ませんでした。まじ死にてえ
#include <bits/stdc++.h> using namespace std; enum arare{ P, W, G, Y }; int main() { enum arare S; int N; int A[3] = {}; // string S; cin >> N; cin >> S; for (int i = 0; i < N; i++) { switch(S){ case P: A[0] = 1; break; case W: A[1] = 1; break; case G: A[2] = 1; break; case Y: A[3] = 1; break; defalt: break; } cout << A[0] << endl; cout << A[1] << endl; cout << A[2] << endl; cout << A[3] << endl; if ( (A[0] == 1 && A[1] == 1 && A[2] == 1) || (A[1] == 1 && A[2] == 1 && A[3] == 1 ) ) { cout << "Three" << endl; }else if( (A[0] == 1 && A[1] == 1 && A[2] == 1 && A[3] == 1 ) ){ cout << "Four" << endl; }else{ cout << "error" << endl; } }
ちなみに、人様の書いたコードでコンパイル通って満点だったコードがこちらになります。
将来拡張性を持たせるために少々アレンジしてます。
え?拡張性なんてABCの問題に無い?うっせーな!あるかもしれないじゃん!
#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; bool flag = false; for(int i = 0; i<n; i++){ string s; cin >> s; if (s=="Y"){ flag = true; }else{ ;//nothing to do } } cout << ( flag ? "Four" : "Three" ) << endl; }
はい素晴らしいですね。ちゃんと満点……って待て待て!
これバグコードじゃねえか!
全網羅テストして気付きましたが、明らかにバグコードです。
これだとYがあったら1つでも2つでもFourになります。
少し考えますので時間下さい。
考え方は良いと思うので、どんな状態でも正しくthreeとFourが出るコードに修正してみます。
もう11時も近いので寝ます。
続きはまた次回。
期待しないで待ってて下さい。