M-SOLUTIONSが主催する個人戦のプログラミングコンテストに参加した。前回に引き続き、企業主催のコンテストに参戦。 何回かペナルティーがあったがABCDまで解けた
内容
- Python3でやっている。
- 参加ログ。
- 所感。
- コンテスト中に何を考えたか。
- コンテスト後に解説をみたり、少し整理したりしたくらいの内容。
- 問題の詳細で細かく書こうと思うものは別記事とする。
- E以上はとりあえず現状自力では無理なのでDまで。解けるようになってきたら更新するかも
結果
Aはささっと終わらし、Bで若干ハマってB完したのが20分くらい。二回もミスった。自分の中でも微妙なの出来具合。Cは、移動していくパターンなので、抜けるやつと新しいやつの大小だけ計算すればいいだけと思って無事30分くらいでC完。Dでもペナってしまったが、基本翌日よくなる前日にあるだけ買って、翌日悪くなる前日に売るって言う戦略で通った。今回は順調に進んでだいぶできたと思う。
どう考えたか + α
A - Kyu in AtCoder
問題タイプ:条件分岐
を条件ごとにif文で分岐。規則性があるから200で割った商を10から引くでもよい。
x = int(input()) if 400 <= x < 600: print(8) elif x < 800: print(7) elif x < 1000: print(6) elif x < 1200: print(5) elif x < 1400: print(4) elif x < 1600: print(3) elif x < 1800: print(2) elif x < 2000: print(1)
B - Magic 2
問題タイプ:Greedy
結構ハマった。要するに最終的にになるように、
回以内で
を2倍していけばいい。考え方的には
の時は
して
してその後、
の時は
して
する。条件満たす前に
になったら'No'、無事終われば'Yes'
a, b, c = map(int, input().split()) k = int(input()) while b <= a: b *= 2 k -= 1 if k < 0: print('No') exit() while c <= b: c *= 2 k -= 1 if k < 0: print('No') exit() print('Yes')
C - Marks
問題タイプ:Greedy
条件的に入るものとでるものの大小だけを計算する。これは別記事にする。
追記:
D - Road to Millionaire
問題タイプ:Greedy
預言者状態なので、翌日よくなる日に買えるだけ買って、翌日悪くなる日に全部売るって言うだけ。これは別記事にする。
追記:
おわりに
当面の目標は、ABC完答できればDまでということで、目標達成。ある意味初めてか? 日々精進をしているおかげか、実装も踏まえなんとなく感覚をつかみ始めた。まぁ貪欲ばかりだったからって言うことかもしれない・・・