Hatena::Grouptopcoder

hotpepsiの練習帳

2017-02-14

SRM 708

23:30

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

Div1 Easy (250) BalancedStrings

問題

  • 文字列中の隣り合う2文字が異なる個数を、文字列のinstabilityとする
  • 文字列の配列のinstabilityは、各文字列のinstabilityの合計値とする
  • 二つの文字列s1,s2について、s1の各文字s1[i]とs2の各文字s2[j]が同じである個数を文字列のsimilarityとする
  • 文字列の配列のsimilarityは、配列の全ての2要素の組み合わせのsimilarityの合計値とする
  • 数Nが与えられる
  • instabilityとsimilarityが等しくなるよう、要素数がNの文字列の配列を構築せよ
  • ただし各文字列は100文字までとする

方針

結果

o-- +2 94.74+100=194.74pt 59th/331st rating 1536 -> 1637 (+101)

元embedded systems engineerなので埋め込んでもOKOK


https://togetter.com/li/1079618

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20170214

2017-02-13

SRM 707

00:39

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

Div1 Easy (250) MazeConstruct

問題

  • N×Mマスの盤面がある
  • 左上から右下までの最短距離がちょうどKステップとなるように障害物を配置せよ

方針

結果

o-- +1 62th/236 75.00+50=125.00ps rating 1454 -> 1536 (+82)

#と.を逆にして提出するという間抜けなことをしてしまったが1challengeのおかげで助かった。

たぶんローグだと通路が#なので#で作ってしまった気がする。


https://togetter.com/li/1076293

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20170213

2017-02-11

Facebook Hacker Cup 2017 Round 2

01:40

https://www.facebook.com/hackercup/round/742957399195355/

A. Subtle Sabotage (12pt)

問題

  • N×M個のマス目がある
  • 上下左右にだけ移動可能
  • 左上から右下に、最短距離で移動する
  • K×Kのお邪魔ブロックを置くことにより、最短距離をN+M-1以上にしたい
  • ただし到達可能であること
  • お邪魔ブロックの最小数を求める

方針

  • サンプルが割と親切
  • ただしKの大きさについての考察は必要
    • NとMの小さいほうをA,大きいほうをBとする
    • AがK以下だと完全にふさがれるので不可能
    • 始点と途中で曲がるところと終点の3つの経路が必要なので、Bが(K×2+3)より小さいと不可能
    • 最初に1つ並べてそれをよけさせて、下から縦にずらっと並べるパターン(サンプル2)
    • ベランダのようなでっぱりを作るパターン(サンプル3)
  • Passed System Test
  • https://github.com/firewood/topcoder/blob/master/fhc_2017/R2_A.cpp

-

結果

o--- 12pt 823th/1587

Tシャツ獲得ならず。


editorial:

https://www.facebook.com/notes/facebook-hacker-cup/hacker-cup-2017-round-2-solutions/1607098535972708


https://togetter.com/li/1073027

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20170211

2017-02-05

SRM 706

12:56

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

Div1 Easy (250) MovingCandies

問題

  • 升目にいくつかキャンディーが置いてある
  • 左上から、キャンディーのあるところだけをたどって右下まで移動する
  • キャンディーを何個移動する必要があるかを求める

方針

  • 考察1
    • 変更量をコストとしてダイクストラ
    • サンプル1でコストが2と出てWA
    • キャンディーが足りないので、進む先にあるキャンディーも移動しているが、それを考慮していないため
  • 考察2
    • memo[もともとキャンディーだった場所を踏んだ数][y][x]=変更量でDFS
    • もともとキャンディーだった場所+変更量が、全体のキャンディーの数以下のところに行ける
  • Passed System Test
  • https://github.com/firewood/topcoder/blob/master/srm_7xx/srm_706/MovingCandies.cpp

結果

o-- 91.69pt 204th/384 rating 1434 -> 1454 (+20)

方針が間違っていて一時間以上かかった。再提出しないで通ったのは良かった。


https://togetter.com/li/1072968

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20170205

2017-01-18

Facebook Hacker Cup 2017 Round 1

23:23

https://www.facebook.com/hackercup/round/1825579961046099/

A. Pie Progress (10pt)

問題

  • パイを売る店がある
  • 一日にM個のパイが売りに出される
  • それぞれの価格が与えられる
  • 毎日パイを1つずつ食べられるように買う
  • まとめ買いしてもよいが、一日にX個買うと、X^2の金額が税として足される
  • コストの最小値を求める

方針

C. Manic Moving (25pt)

  • Wilsonは引っ越し屋をしている
  • N個の街があり、M本の道路で結ばれている
  • Aiと町Biに移動するのにガソリンをGi消費する
  • Kの家族が街Siから町Diへ引っ越しをする
  • トラックには2家族ぶんまで荷物が積める
  • 順番が先の家族の荷物を先に積み込む必要がある
  • 順番が先の家族の荷物を先に届ける必要がある
  • ガソリンの消費量の最小値を求める

方針

  • 考察
    • まず最短経路を求めておく(全頂点についてダイクストラ)
    • DP
    • 状態として、(A)何も積み込んでいない状態、(B)家族kの荷物を積み込んで、家族kの出発地にいる状態、(C)家族kと家族k+1の荷物を積み込んだ状態がある
    • (A)から(B)へ、(B)からは(A)か(C)へ遷移できる
    • (C)のときは、先に積み込んだ家族の目的地へ行く必要があり、分岐はないので、(B')家族kの荷物を積み込んで、家族kの目的地にいる状態、まで遷移させて考えてよい
  • 解法
    • あるターンの処理は次の通り
    • 前のターンの(B)か(B')の状態から、(C)を経て(B')に遷移できる
    • (A)にいれば(B)に遷移できる
    • (B)か(B')から次のターンの(A)に遷移できる
  • Passed System Test
  • https://github.com/firewood/topcoder/blob/master/fhc_2017/R1_C.cpp

D. Beach Umbrellas (40pt)

問題

  • ビーチにN本のパラソルを広げる
  • パラソルを固定する穴が等間隔にM個空いている
  • 各パラソルの半径はRiである
  • パラソルがぶつからないように配置するとき、配置の仕方が何通りあるか求める

方針

  • 考察
    • 端のことを考えると、端に置くものによって、端以外の余白が変わる
    • 端を固定して、余白が何通りかを求めて、全ての端のパターンを列挙すればできそう
    • 端以外に使える長さCは、(M-1-端に置くものの半径)
    • Riの合計の2倍が、C以下なら配置できる
    • 余白を配置する場合の数は、重複組合せ
    • Cに配置するのは(N-2)!通り
  • 提出
  • Time Expired
  • nCrを毎回計算するのが遅すぎた
  • rは小さいのでメモ化すればよい
  • https://github.com/firewood/topcoder/blob/master/fhc_2017/R1_D.cpp

結果

o-o- 35pt

なんとか通過した。

pie chartの次はパイ屋さんときた。予選の問題のアップグレードになっていて、今年は問題文が面白い。

CはN=5000のワーシャルフロイドは間に合わなさそうだと思ったらN<=100だった...

editorial:

https://www.facebook.com/notes/facebook-hacker-cup/hacker-cup-2017-round-1-solutions/1599716033377625


https://togetter.com/li/1070628

トラックバック - http://topcoder.g.hatena.ne.jp/firewood/20170118