くろたんく雑記帳

日常とか、わんちゃんとか、機械学習とか、競プロとか、

MENU

AtCoder Beginner Contest 178 参加ログ・感想

初めてAしかできないっていう。本番弱いなぁ。 復習しっかりする。


内容

  • Python3でやっている。
  • 参加ログ。
  • 所感。
  • コンテスト中に何を考えたか。
  • コンテスト後に解説をみたり、少し整理したりしたくらいの内容。
  • 問題の詳細で細かく書こうと思うものは別記事とする。
  • E以上はとりあえず現状自力では無理なのでDまで。解けるようになってきたら更新するかも

結果

Aのみ。 Bはa, b, c, dの場合分けを全部やろうとして大失敗。掛け算の結果のmaxをとればよかった。Cもまともに数えようとして大失敗。目的外のものを数えるっていうのが結構パターンとしてありえるけど本番でそれができない・・・。Dは目すら通せなかった。


どう考えたか + α

A - Not

問題タイプ:条件分岐

{\displaystyle x}が0か1で条件分岐

x = int(input())
if x == 0:
    print(1)
else:
    print(0)

B - Product Max

問題タイプ:最大値

珍しくfor文使う問題じゃなかった。それは制約から判断できる。場合分けをしようすると、複雑になりすぎる。掛け算のパターンとしてありうるのは{\displaystyle a \times c, a \times d, b \times c, a \times d}なので、その最大値が答え。もう少し具体的に考えると、{\displaystyle a}{\displaystyle c}{\displaystyle d}をかけた時に それぞれの正負を考えずに大きい方を選択すればよい。{\displaystyle b}についても同様に考えるので、以下のようになる。

a, b, c, d = map(int, input().split())
ans = max(max(a*c, a*d), max(b*c, b*d))

C - Ubiquity

問題タイプ:順列・数え上げ

そのものを数えようとすると、パターンが多すぎて複雑化してダメ。こういう時は、全パターンから条件外のものを引き算すればいい。たとえば、数列に{\displaystyle 0}が含まれないような数列の数。同じく{\displaystyle 9}も。同時に含まれないものは逆に足す。これは別記事にする。


D - Redistribution

問題タイプ:DP

動的計画法で解く。ちゃんと問題を読めていないので、別記事にする。


おわりに

初めて、Aしかできなかった。Bができなかったのは完全に下手こいた。Cも条件外を数えれば良いだけだったのに気づけなかった。ここら辺も問題を解く量が少ないからかな。まだ200問程度しか解いてないので、もう少し精進を続けよう。