Hatena::Grouptopcoder

Gus@topcoder

topcoderのid:gusmachineの記録です。普段の日記は揺動散逸日記をどうぞ。
 | 

2010-01-04

SRM 457

00:30

x o opened で 238.47 pts. 142位 レーティングは1988 -> 2002でした。

  • 250 system test failed.
  • 500 238.47 pts.
  • 1000 opened. これ直ぐには解けそうにないです。

250

250なので簡単のはずだったのですが。

問題のポイント:

  • 全探査しても大丈夫。一日1440分 x 時差 19 を全部生成しても数万. また、入力の?の部分を展開する解法で、99:99を生成するような手抜きをしても数百万程度。
  • 文字列順で最初の答えを出すこと。

後者の条件への定石として、答えを文字列順に生成して最初に合ったら終了するコードを採用しました。あとは時差を-9時間から+9時間まで回して時計の文字列をつくり、入力の文字列と同じか確認すればok.

24時間の繰り上がり繰り下がりがあるので、そこをちゃんとやっているかだけ確認しました。

しかしSystem Testで爆死。その後でコードを見直して驚愕。

  for (int i = 0; i < 23; ++i) {
    for (int d = -9; d <= +9; ++d) {

なぜ23なのか! というわけで答えが23:xxとなる入力で死んでました。本当にどうしてこんなことに。

500

場合の数を答えよ。

mod nでの数字のみが問題となります。mod n で異なる数字をいくつ使ったかで場合分けして数えました。

解答を見ていただければわかりますが、ソースコード上で計算してます。

問題のn * 2を n ^ 2と誤読してしまい、ものすごく大きな答えを出してしまいました。テストが通らないので修正して提出。

1000

opened. 時間がなかったので問題読んで終了。

 |