今日のicpcの勉強で

 今日、ICPCの勉強をしようとhttp://rose.u-aizu.ac.jp/onlinejudge/index.jspをさまよっていたところ、このページの一番最初にある問題http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/problem.jsp?vol=1&id=0100&tle=1&mle=32768&title=Sale%20Result&doc=4&lang=jpに目がいった。



 なんだか、一番最初にある問題としては正解率が低いようだ。もちろん、一番最初にある問題が一番簡単というわけでもないだろうが・・・。興味を持ったので一応解いてみた。


 問題内容はいたって単純。社員番号と販売単価、販売個数が与えられて、一定以上の売上金額を出した社員の社員番号を表示する、というそれだけである。しかし、販売単価と販売個数の最大値を見てみると、掛け合わせた数がint型で表現できる値を超えてしまうことが分かる。
 もしかしてここに引っかかった人間が多かったのだろうか? と思い実装を開始、int型とlong long型の配列を用意してそこに入力データを突っ込んでいくだけのプログラム。


 sample inputを通してみると、見事にoutputと同じになった。早速Submitしてみる。


 Wrong answer


 ・・・まあね、こんなに簡単なら間違える人なんてあんまりいないよな。


 さて、どこが間違っているのだろうか・・・と考え出したところで俺はハッとひらめいた。

Input

複数のデータセットが与えられます。入力の終わりは0一行。各データセットは以下のとおり:

データ数 n
社員番号 販売単価 売上数量(整数;半角空白区切り)
:

 もしかして、この社員番号というのは0001のような数字が入ってくるようなパターンがあるのではないのだろうか。もしそうなら、単純にint型の配列を使っていると意図した値が出力されない可能性が出てくる。


 ということでint型ではなくstring型の配列に社員番号は格納することにした。これで大丈夫だろう。きっとこれに騙された人間が多かったに違いない。実装してSubmitしてみた。


 Wrong answer


 なん・・・だと・・・?


 ・・・どういうことだ。何か他に間違えているところがあるのだろうか? さっぱり分からない。
 ここから数十分問題とにらめっこをしていた。そして、

Sample Input

4
1001 2000 520
1002 1800 450
1003 1600 625
1001 200 1220

 ん? 社員番号が同じ値の行がある・・・・・・。


 


 なんということだろう。どうやら俺は問題文の「社員番号重複しない」という記述を曲解してしまっていたようだ。社員に対して割り振った社員番号は重複しないが、inputとしてあたえられる行には何度でも出てくるようだ。
 まさか、こんな落とし穴があろうとは、もっと真面目にSample Inputを見ておくべきだった・・・。


 mapを使ってソースを大幅に変更した後、再びSubmitしたら受理された。
 今日の教訓、Sample InputとOutputはよく見よう。