名もなき未知

エンジニアリングとか、日常とかそういうのをまとめる場所。アクセス解析のためGAを利用、Googleに情報を送信しています。商品紹介のためAmazonアフィリエイトを利用、Amazonに情報を送信しています。記事に関しては私が書いていない引用文を除いて自由にご利用ください。

ABC079所感

調子が悪かったので寝ていたら終わってました。1時間以下で解けてしまったので所感だけ。

コンテストURL

https://beta.atcoder.jp/contests/abc079

問題

A問題

A - Good Integer

4桁の数字が与えられるので、上3つまたは下3つが同じ数値ならYes、そうでないならNoを出力する。

言語:Python3

print("Yes" if (lambda x: int(x[1:])%111==0 or int(x[:-1])%111==0)(input()) else "No")

B問題

B - Lucas Number

ある法則で与えられるリュカ数を計算して出す問題。フィボナッチ数列求めるみたいに出来る。nまで求めればと良かったが、どうせ同じようなものを毎回求めるため、毎回n=86になるものまで求めて出しておいた。

言語:Python3

l = [2, 1]
for i in range(2, 87):
  l.append(l[i-2]+l[i-1])
print(l[int(input())])

C問題

C - Train Ticket

与えられた4つの数値を加減算で7になるものを求める問題。

…はい。制約見て大丈夫なので即全探索でevalします。zipでまとめてから、Dの部分だけ足してあげると見やすいかな、と思って最終的には下記の形になりました。

言語によっては最初のABCDをパースするところが若干難しいんじゃないかな?

言語:Python3

l = list(input()) 
for i in range(8):
    p = ["+"if i&j else"-" for j in[1, 2, 4]]
    line = "".join([v+o for v,o in zip(l,p)]) + l[3]
    if eval(line) == 7:
        print(line + "=7")
        break

D問題

D - Wall

最小コストで壁画の数値を変換してくださいという問題。

前提として-1, 1は変換対象にしません。その上で予め ダイクストラ ワーシャルフロイド法を使って、N → 1 の変換の最小コストを求めておき、その計算結果を使って変換をかけてあげればOKです。

表の大きさが固定値の ダイクストラ ワーシャルフロイドなんて初めて使いました…。

※ワーシャルフロイドでといているのに、ダイクストラと書いてたのはなぜ…(Twitterで指摘頂いたので修正)

言語:C++ コードは長いためリンクとし、省略します。 https://beta.atcoder.jp/contests/abc079/submissions/1789416

まとめ

出とけばよかった。割りと得意な問題が出ていたので、全完セットだと思う。Twitterで答え要約を見てから解いたが、50分程でトキ終わっているので、おそらく本番で出ても今回は行けたセットだと思う。

惜しいことをした…。体調管理はしっかりやっておこう。

これはひどい