AtCoderで茶色を目指す 2日目

7:30に起床。前日のコンテストは22時半過ぎまでしたので、疲れた分たくさん寝てしまいました。今日もがんばります。では、勉強開始!

 

ひたすらチュートリアル

とにかくチュートリアルです。早く終わらせたいと思いながら、案外時間がかかっています。もう少し、軽めに読んで問題に入りたいところです。まあ、時間がかかる理由がよろしくないので、反省として残しておきます。あと、コンテストでつまづいた問題があったので、それについても記録しておきます、

 

反省

午前中から勉強しました。でも、映画見ながらの勉強だったので、身についてない。。。

たまにやりがちな、ながら勉強は早々に卒業したいです。ちなみに、「スパイダーマン」見ました。明日は早めに目標を達成して、続きを観るぞ!!

 

昨日のコンテストの復習

前日のコンテストのC問題でつまづいたので、その復習をしました。Many Ballsという問題です。

#include <bits/stdc++.h>
using namespace std;

int main() {
int N;
cin >> N;
 
string S;
while(N>0){
while(N%2==0){
S.append("B");
N/=2;
}
N-=1;
S.append("A");
}
reverse(S.begin(),S.end());
cout << S << endl;
}

実際に自分が書いた間違ったコードです。whileのあたりとか間違ってないでしょ!とか思いながら、何度も不正解の文字を見ました。

このコードの間違っている箇所は変数Nの宣言です。

問題文を見てみると、制約に1<=N<=10の18乗(書き方がダサくてごめんなさい)とあります。私の書いたコードだと、intでは足りなくなります。なので、intの部分をlong long を使うことで問題を解消しました。

ここら辺の細かい説明は参考サイトがあったので、こちらで確認させていただきました。初心者の私でもわかりやすい解説でした。最後にも同じリンクがあります。

 

参考にしたサイト

【灰色・茶色必見!】変数の型と扱える数の範囲 - オーバーフローとは? - pyてよn日記