Hatena::Grouptopcoder

hotpepsiの練習帳

2016-12-15

TCO16 Algorithm R2B

01:18

https://competitiveprogramming.info/topcoder/srm/round/16739/div/1

Easy (300) TriangleTriples

問題

  • 三角形の辺の長さになりうる3つの数を三角形数とする
  • 1以上A以下のa、1以上B以下のb、1以上C以下のcの三つの組み合わせの三角形数の総数を求める

方針

結果

--- 139th/693 0pt 1543 -> 1523 (-20)

これは難しかったので座ってるだけだった。

C >= Aの領域がよくわからなくなったのでRで図を描いた。

三角錐は天地逆の感じ。

縦がC、横がAで、AがCより小さいときは、カットされた形になる。

f:id:firewood:20161213234003p:image


http://togetter.com/li/979836

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20161215

2016-12-13

TCO16 Algorithm Round 2A

19:32

https://competitiveprogramming.info/topcoder/srm/round/16736/div/1

Easy (400) LCMGCD

問題

  • 2^a×3^bの数からなる配列がある
  • 任意の2つの要素を選び、その要素を削除する
  • 2つの要素のGCDかLCMを求め、配列に追加する
  • 配列の要素が1つになるまで繰り返したとき、値をtにできるかどうかを求める

方針

  • GCDはmin,LCDはmaxを取るのとほぼ等しい
  • Failed System Test
  • 乱択でもいけるらしい
  • 10万回くらい試行すればsystem testは通る
  • https://github.com/firewood/topcoder/blob/master/tco_2016/LCMGCD.cpp
  • 2軸のmin/maxのため、x・yそれぞれで大・等・小の3通り、計9通りにわける
  • xとyどちらも等しい状態に遷移できるか探索すれば良いっぽい

結果

x-- +1 50pt rating 1410 -> 1543 (+133)

変則400点。写経ボーナスをもらった。


http://togetter.com/li/974447

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20161213

2016-12-12

TCO16 MM R2

00:26

https://competitiveprogramming.info/topcoder/marathon/round/16703

StarTraveller

また記念submitで終わってしまった。

SRMの復習が終わったら復習するつもり。(いつになるやら...)


http://togetter.com/li/973733

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20161212

2016-12-11

競技プログラミングの練習方法について

21:30

Competitive Programming Advent Calendar 2016 (その2)の11日目の記事です。

今年、PEAK(超一流になるのは才能か努力か?)という本を読んだ。

練習と能力向上について、

  • できないことに挑戦することが大切(惰性で練習してもスキルは上がらない)
  • 練習の結果を評価し、改善すること(良いコーチを持つなど)
  • 効果的な練習をすることでスキルに特化した脳内イメージができる

というようなことが書かれている。モーツァルトのエピソードなど、なるほどと思うことが多かった。

これを読んで今年はピアノの練習を少し工夫し、前より効果的に練習できた気がしたので、競技プログラミング(以下競プロ)にも適用できたらいいなと思っている。

(以下は思いつきでありまだ実施していない)

PEAKの中で3F(focus、feedbackfix)というのが出てくる。苦手なところを集中して練習し、結果を考察し、悪い部分を直す、というサイクルをまわすとよいという話である。

そのためにはまず苦手なところを見つける必要がある。

SRMのような短時間の競プロの場合、全体としては、問題文や制約条件を理解する→方針を立てる→実装というような流れになる。

それぞれのフェーズについて、

  • 問題文の理解の間違いは仕様理解バグ
  • 適切な方針やアルゴリズムを選択できていないのは方針バグ
  • 正しく実装できていないのは実装バグ

として、自分のSRMのdiv1で結果がどうだったかを分類してみた。SRM526から702まで159回出ていて、期間を3回にわけた。

期間総数AC実装バグ方針バグ仕様理解バグ未提出
SRM526~5995728 (49.12%)5 (8.77%)9 (15.795%)3 (5.26%)12 (21.05%)
SRM600~6505031 (62.00%)8 (16.00%)8 (16.00%)03 (6.00%)
SRM651~7025222 (42.31%)4 (7.69%)10 (19.23%)016 (30.77%)
全体15981 (50.94%)17 (10.69%)27(16.98%)3 (1.89%)31 (19.50%)

自分の場合は方針バグが多いので、そこを直すべきである。また、実装バグも少なくない。

実装結果は提出記録を見ればよいが、方針については時間がたつと全く思い出せないので、その場なり、直後なりでメモを取って読み返せるようにしたほうがいい。

同僚のhama_duさんが一人Slackをやっているそうで、良さそうなので真似するつもり。

というような感じで、

  • 対象を分解する
  • 現状を知る
  • どこを直せばよいかを見つける

のように、多少意識的に取り組めればいいかなと考えている。来年以降試す予定。

また、全く別の側面として、スキルを上げることだけを目的にすると楽しさが失われがちになるので、続けられるようなバランスでやっていきたい。

(良い練習方法があったらtwitterなどでぜひ教えてほしいです)

明日はzukky162さんと(フライングで公開済ですが)Komakiさんです。

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20161211

2016-12-05

Google Code Jam 2016 Round 1C

00:41

https://code.google.com/codejam/contest/4314486/dashboard

Contest Analysis

https://code.google.com/codejam/contest/4314486/dashboard#s=a

A. Senate Evacuation

問題

  • 議会場が火事になった
  • N個の政党の議員を二人ずつ退避させる
  • いかなる瞬間においても、過半数を取る政党がないように保つ必要がある
  • 退避させる手順を求める

方針

B. Slides!

問題

  • 1からB番までのB個のビルがある
  • 1からB番への移動経路がちょうどM通りになるよう、B番以外の任意のビルに片方向の移動手段(辺)を追加する

方針

C. Fashion Police

問題

  • ニューヨークでは同じ恰好をすると逮捕されるので、毎日違う格好をする必要がある
  • J枚のジャケット、P枚のパンツ、S枚のシャツを持っている
  • 毎日それぞれから一つずつ選ぶ
  • J、P、Sの三つが全て同じ組み合わせだと即逮捕
  • 二つが同じ組み合わせのときは、K回までは許容される
  • 逮捕されない最大日数を求める

方針

結果

oox-o- 32pt 1671st/5950

C問題が面白すぎ。

Bの出力を空白区切りにしてしまい、smallも通らなかった。diffを取るようなMakefileを書くのが良さそう。

largeの方針は立たなかったので、いずれにせよ今年は厳しかった。

multiple languagesの部は、最終的に13言語を使って5位タイだった。色々調べるのが楽しいので、来年も10言語くらいは使いたい。

https://www.go-hero.net/jam/16/multilang


http://togetter.com/li/972694

トラックバック - https://topcoder-g-hatena-ne-jp.jag-icpc.org/firewood/20161205