Hatena::Grouptopcoder

iwbtr - kmats このページをアンテナに追加 RSSフィード

2012-02-17

Codeforces Round #107 (Div. 2) 反省

| 02:59 | Codeforces Round #107 (Div. 2) 反省 - iwbtr - kmats を含むブックマーク はてなブックマーク - Codeforces Round #107 (Div. 2) 反省 - iwbtr - kmats Codeforces Round #107 (Div. 2) 反省 - iwbtr - kmats のブックマークコメント

Rank: 400/1401

Score: 1366

Solved: oox--

Rating: 1418 -> 1501 (+83)


ギリギリ青キタ――(゚∀゚)――!!

Cを通せなかったのは残念だけど,最近多かったケアレスミスやWA@pretest 1がなかったのは良かった.


151A

入力する値がたくさん出てきてうぜーーと思うも,Noteの通りに実装したら他のSampleでも通ったのでそのまま提出.

何かコーナーケースがあるんじゃないかと少し気になるも,まあAだし・・と思ってしまった.危険である.

https://github.com/k-mats/codeforces/blob/master/150/151A.cpp


151B

入力するデータがたくさん出てきてうry

名前name, タクシーの番号の数t,ピザ屋の番号の数p,女の子の番号の数gを持つFriendクラスなるもの

class Friend {
public:
  string name;
  int t;
  int p;
  int g;
}

を用意しておき,上から順番にインスタンスを作ってはvector<Friend> vfに突っ込む.

と同時にt, p, gの最大値max_t, max_p, max_gを取得しておき,各maxに等しい値を持つFriendのnameを最後に出力していけばOK.


電話帳の登録数が0のときの処理方法が書いていなかったので,何かコーナーケースがあるんじゃないかと気になるも,まあBだしry

https://github.com/k-mats/codeforces/blob/master/150/151B.cpp


C (150A)

6はlosing number,30は6を取ればいいのでwinning number,素数はlosingでもwinningでもない・・ということは,各i < qに対し,losing or winning or primeを順々に判定していけばいいのでは?と考えた.

winning numberとは,因数の中にlosing numberを持っている数.

losing numberとは,winningではない&&素数ではない数.


が,この方法だと各i < qに対し一々素数判定をすることになるために当然TLE

losing numberは上の考え方ではなく,”素因数分解したときに素因数が2つしかない数”とするのが正しい.

すると,qを素因数分解して,残りの素因数が2つになるような値を取ればよくなる.

例)q = 120 = 2*2*2*3*5に対し,残りが2*2になるように値を取る,すなわち2*3*5 = 30を取ればプレイヤー1の勝ち.

https://github.com/k-mats/codeforces/blob/master/150/150A.cpp


D (150B)

Cと同じ1500点だったので,解かれた数を見つつCが無理そうならDに移ろうかと思うも,Dはほとんど解かれていなかったので結局ほとんど見てない.


E

みてない


反省点

  • 場合分けの条件を精査しなかった

教訓

  • TLEになるような場合分けの場合は小細工よりも大元の条件を吟味し直すべし