ARC099に参加した(210位)
ARC099に参加しました。210位でレートは1304→1429になりました。 久しぶりのコンテスト参加で緊張しましたが、Dをそれなりに早く解いたのがよかったっぽいです。
そういえば先日書いた記事がホッテントリに載りました。結構うれしいものですね。
振り返り
C - Minimization
- 最小値が1なので、全要素を1にすればよい
- 1回適用すると1がK-1個増える
1を中心に左右に1を広げていくイメージで解きました。1の左右それぞれについて端から最適な回数で処理をして、1の周りの余りはよしなにやる感じ。
import math n, k = map(int, input().split()) A = list(map(int ,input().split())) print(math.ceil((n-k)/(k-1)+1))
D - Snuke Numbers
手で書いても全く分からなかったので実験しました。
import matplotlib.pyplot as plt %matplotlib inline def digit_sum(i): return sum(map(int, list(str(i)))) scores = [i/digit_sum(i) for i in range(1, 50000)] plt.figure(figsize=(10, 5)) plt.scatter(list(range(1, 50000)), scores, s=1) plt.show()
規則性があることがわかります。ちなみにスコアがジャンプするのは繰り上がりが起きるときなので、XXX999
みたいな数にだけ着目すればよいと分かります。
XXX999
みたいな数それぞれについて、次のやつとの比較を行って、だめだったら消せば良いと思います。
実装は鬼汚いです。
def digit_sum(i): return sum(map(int, list(str(i)))) def score(head, tail): return num(head, tail)/digit_sum(num(head, tail)) def num(head, tail): return int(str(head)+tail) k = int(input()) tail = '' head = 0 cnt = 0 last = 0 while True: head += 1 if score(head, tail) <= score(head+1, tail): if num(head, tail) > last: print(str(head)+tail) last = num(head, tail) cnt += 1 if cnt == k: break else: head = 0 tail += '9'
E - Independence
- 辺をできるだけ少なく切断して2つのクリーク(部分グラフがすべて完全なグラフ)に分割すればよい
- 補グラフを取ると少し見通しが良くなって、補グラフにできるだけたくさん辺を足して完全二部グラフにする問題に変換することができる
- 補グラフをとった時点で二部グラフでなければ達成不可能。
- 辺はいくつでも足していいので、補グラフを連結成分分解して成分の集合を2つにまとめて完全二部グラフにすることができる。
- クリークの辺の数は頂点数で決まり、辺を多くするなら頂点を多くすれば良い。ただ、頂点集合が2つあるので、2つをできるだけ同じサイズにすればよい。
- うまいまとめかたを探すためにDP
みたいな感じで解けると思います。僕は実装が間に合いませんでした。
感想
Dが早く解けたのでレートもあがり万々歳です。たのしいですね。
そろそろ証明からは逃れられなそうなので、普段から軽く証明することは意識したいと思います。
Kaggleで使えるpandasテクニック集
PythonでKaggleなどのデータ分析を行う際、pandasでゴリゴリ作業をすることが多いかと思います。
最近知って「めっちゃ便利やん!」ってなったものをまとめておきたいと思います。 全部の関数にドキュメントへのリンクを付けたので参考にしてください。
今回も検証にはTitanicのデータセットを用います。また、文中でのdf.hoge()
はpandasのDataFrameのメソッドであることを、pd.hoge()
はpandasの関数であることを表します。
df = read_csv('input/train.csv', index_col=0) print(df.shape) df.head()
続きを読む
ARC098に参加しました (726位)
ARC098に参加しました。C問題を1回TLEしてD問題が解けず無事死亡しました。 レートは1334→1298ということで、微減ですね。 D問題が解けなかったのは久しぶりなので練習不足を感じます。 最近Kaggleが忙しくて過去問埋めもあまりできていません。
前回の記事
続きを読むAGC024に参加しました (445位)
ひとつの本屋で起きたこと。を読んで
バズっていたこの記事を読んでいろいろ考えたのでメモがてら残しておく。
これを読んでいる間は「なんだこの絵に描いたような無能な上司は」「たった一人のマネジメントでこんなぐちゃぐちゃになるんだなぁ」といった感想しか持たなかったが、数時間置いて読み返すと背筋が薄ら寒くなった。
これ。
繁忙期も終わっていよいよ棚の構成を考えなければならなくなっていた頃、私は『岩波文庫はなるべく少なくするように』と言われてイライラしていた。 岩波書店の本は基本的に返品できない“買切”という制度。 でも大学の書店では教授が大好きだし、授業でも使うし、他の出版社の文庫よりはるかに売れる。 そりゃぁ選書が悪けりゃ在庫が増えるけど、2ヶ月ごとに100冊は注文しているけれど、ほとんど売り切れますよと言っても『もう注文はしないで在庫だけでまわして』と言われたのでカチンとキてその日のうちに100冊近く注文した。 (悪い店員だな、真似しないように!)
それもほとんど売り切れた。でもそういう店の特徴や実績は関係ないそうだ。
多くの店舗で岩波書店の本は(大学の書店ほど)売れていないのだろうし、買切制度も相まって在庫リスクも大きい。 だから全体としては岩波文庫を縮小する方に向かったほうが「プラマイ合わせるとトータルでは」良いのかもしれない。 でも、そうじゃないよね。各店舗もプラスにすべきだよね。
データ分析をしている人は常にこういうことが起きないか気を配るべきだと思う。 油断しているとそれぞれの店で事情は違うのに「全体としての傾向としてはそうだよね」みたいな戦略を取りがちになる。
現場の感覚はきっと正しいことが多くて、一方でデータで見えてくるものもあって、 どうバランスをとって両方を活かしていくか、ということが今後求められているマネジメント層やデータアナリストの在り方ではないだろうか。
ちなみに続編もだいぶ悲惨でした。
GCJ Round1C 通過しました (1165位)
AGC023に参加した (412位)
アイコンが変わりました。クラウドソーシングサイトでお願いして写真を送ったところ、ものごっつい美化されて返ってきました。 かわいいのでありとあらゆるSNSのアイコンを変更して回っています。
さて、AGC023に参加しました。AとBを解いて、Cで撃沈した結果、412位でした。 レートは1121→1240になりました。 ついに水色に突入! 名実ともにABCを卒業ですね。
パフォーマンスは1800(青相当)だったので、ARCにちゃんと毎回出てればここまではあがるぞ、ということでしょうか。
500点〜800点の問題(ARCのD/E、AGCのA/B/Cあたり)を順に埋めていく季節が来たようです。
前回の記事
続きを読む