Hatena::Grouptopcoder

hotpepsiの練習帳

2013-01-26

Codeforces 163

02:19

Div2 A. Stones on the Table

問題

  • RGB3色の石が並んでいる
  • 隣り合う石が全て異なるようにするために一つずつ取り除く
  • 取り除く総数を求める

方針

  • 連続してたら+1する

Div2 B. Queue at the School

問題

  • 男子女子が一列に並んでいる
  • 1ターン毎に条件を満たしたら1移動する
  • 男子の直後が女子の場合、次のターンに位置をゆずる
  • tターン後の状態を求める

方針

  • シミュレーション
  • 1番目から見ていき、女子の直前が男子なら交換

Div2 C. Below the Diagonal

問題

  • n×nの行列が与えられる
  • n-1個は1、その他はゼロである
  • 行または列の交換が可能
  • 1の位置が与えられる
  • 全ての1を対角線よりも下に移動するための手順を求める

方針

  • 行または列を共有する1があった場合、それらは交換しても共有したまま
  • 行または列を共有する1がないと仮定して解いてみる
  • サンプル通らず
  • (終了)

結果

oo-- 974pt 225th/1958 rating 1673 -> 1666 (-7)

C以降はかなり難しかった。

Cはデータの持たせ方もいまいちだった。

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

2013-01-22

SRM 567

22:34

Div1 Easy (250) TheSquareRootDilemma

問題

  • 整数AとBが与えられる
  • (sqrt(A)+sqrt(B))^2が整数になる組み合わせの総数を求める

方針

Div1 Medium (500) StringGame

問題

  • 文字列の集合Sが与えられる
  • 最初のプレイヤーがSから文字列をひとつ選び、並び替えてXとする
  • 最初のプレイヤーがアルファベットの並び順を選ぶ
  • XとS内の全ての文字列を並べ替えた文字列のうち、Xが単独の辞書順最小にできるかどうかを求める

方針

  • 使用された文字数をカウントしておく
  • 他の文字列より文字数が多い場合は、必ず答えに加える
  • 同数のときは、引き続きマッチング
  • サンプル合ったので提出
  • Challenge Succeeded
  • (解き直し)
  • 辞書順で大きいものは除外していく
  • 評価する文字を決める
  • 除外していない全ての文字列のうちで、最大か同数であるとき、最大より文字数が少ないものを除外する
  • 全ての文字列が除外できた場合は答えに加える
  • https://github.com/firewood/topcoder/blob/master/srm_5xx/srm_567/StringGame.cpp

結果

xx- 0pt 488th/654 rating 1373 -> 1309 (-64)

easyは77777を7777にして落とした。たぶん部屋が寒かったせい。定数はコピペすべき。

Aでループを回して、Bに関しては答えにsqrt(M/x)を足せばよいという綺麗な問題だった。

mediumは26回ループみたいな感じで書いたらOKだった。シンプルに書けた。

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

2013-01-21

Codeforces 162

01:39

Div2 A. Colorful Stones

問題

  • RGB3色の石が並んでいる
  • 色の指示が与えられる
  • 指示と同色なら次の石に移動する
  • 最後にいる場所を答える

方針

  • 一つずつ処理する

Div2 B. Roadside Trees

問題

  • 高さのばらばらの木がある
  • 頂上にクルミがある
  • 移動するか食べるのに時間が1かかる
  • 高さが同じなら木から木へ飛び移れる
  • 全てのクルミを食べるまでの時間を求める

方針

  • 結局のところabsで足す

Div2 C. Escape from Stones

問題

  • 岩が自分めがけて落ちてくる
  • 逃げると、新しい自分の位置に向かって落ちてくる
  • 逃げた方向が与えられる
  • 岩が落ちた位置の順番を求める

方針

  • rだったら左端、lだったら右端に置いて範囲を狭めていく

Div2 D. Good Sequences

問題

  • 連続する2数が互いに素ではない数列を、良い数列とする
  • 与えられた数列の部分数列のうち良い数列の最大長を求める

方針

  • ある数Xに着目する
  • Xより前の数それぞれと素かどうか比べる...のは時間がかかりすぎて無理
  • 素でないというのはすなわち素因数が共通
  • 素因数ごとに、最後に使われた場所だけ覚えておけばよさそう
  • 素因数分解して、最後の素因数の場所の長さ+1の最大値を記録していく
  • 提出

Div2 E. Choosing Balls

問題

  • 何色かのボールがあり、それぞれのボールに値が設定されている
  • ボールを順番に取り出すか使わないかを選ぶ
  • 取り出したボールのスコアは、直前のと同じ色ならa倍、そうでなければb倍した値とする
  • スコアの最大値を求める

方針

  • 単純にDPしてみる
  • 提出
  • wrong answer

結果

ooxo- 2874pt 173rd/1525 1674 -> 1673 (-1)

Dが解けたのはなかなか会心。ただCが落ちたためratingほぼ変わらず。

CがTLEした。MSVCの100万回endl出力はGCCのより遅く、GCCだと1secだったがMSVCだと全く間に合っていなかった。endlはバッファをフラッシュするので遅いということだが、GCCも仕様は同じだと思うので優秀である。遅いらしいというのは知っていたが全く気にしていなかった。

改行でなくスペースで区切ってもOKだったっぽい。

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

2013-01-17

Codeforces 161

03:01

Div2 A. Beautiful Matrix

問題

  • 中央に1を移動させる

方針

  • abs取るだけ

Div2 B. Squares

問題

  • 異なる大きさの正方形を重ねる
  • ちょうどk枚重なる点をどれでも良いので答える

方針

  • 辺の上の座標がn~1になる
  • kが1~nなら辺上の座標で答える

Div2 C. Circle of Numbers

問題

  • 1~nのN個の数値を円状に並べる(5<=N<=10000)
  • 隣と一つ飛びの隣をペアとする
  • 2N個のペアが与えられる
  • 元の数値の並びを答える

方針

  • 紙に書いてみる
  • XYZABCDEFGと並んでいたとき、Aの隣の候補について考える
  • set<int>を10000個用意してペアを突っ込む
  • AにはYZBCがペアとして入る
  • BのペアはZACD
  • AとBの共通のペアはZとCで、一つ飛びだと共通のペアは1つ
  • つまり共通のペアが2つなら隣
  • ただしN=5のときは、ペアが4つ、すなわち自分以外全部ペアなので、任意の並び順で良い
  • N=6のとき、ABCDEFはACBDFEと答えてもよい。反対側の数値だけがペアではないので、それだけ場合わけするとうまくいく
  • N>=7は場合わけ不要
  • 1から順番に1つずつ決めていく

結果

ooo-- 492+464+1500=2456pt 83rd/1591 rating 1534 -> 1674 (+130)

Cが通ったので満足。

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

2013-01-14

Codeforces 160

16:32

Div2 A. Roma and Lucky Numbers

問題

  • 4と7がラッキーナンバー
  • 4と7がk個までの数の個数を求める

方針

  • 数えるだけ
  • intではなくstringで入力する

Div2 B. Roma and Changing Signs

問題

  • 非減少の数列が与えられる
  • ちょうどk回符号を反転する
  • 和の最大値を求める

方針

  • 最後の負の数までは、小さいほう(絶対値の大きいほう)から反転していく
  • 最後の負の数については、正の数を反転したほうが良いケースがある
  • 場合わけ...
  • (終了後)
  • 絶対値でソートして持っておくのもあり

Div2 C. Maxim and Discounts

問題

  • スーパーで買い物をする
  • Mパターンの割引がある
  • まとめて買うと割引される
  • 割引するためにはq個買う
  • q個の中の最低金額を上回らない品物が最大2個無料になる

方針

  • DPかな
  • 提出
  • TLE...
  • 総和をいちいち求めていたので、差にする
  • 提出
  • TLE...
  • これ大きな個数の割引は無視して良いのでは
  • 提出

結果

ooo-- 00:05+0,00:45+2,01:29+2 2076pt 444/1424 rating 1581 -> 1534

Bはとりあえず負の数は全部反転させて、そのあと絶対値の判定をすればよかった。最後のインデックスの負数で場合わけしてしまい複雑になった。

Cは最小のだけ貪欲に適用すればよかった。

Dはあとで解く。

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