【Atcoder Beginner Contest 127-D】強くなって再び相見えようとはな…

2020年4月26日

スポンサードリンク

こんにちは。ふぁんたです。

AtcoderBeginnerContest 127に出ていました。

 

その中に、こんな問題が出ました。

https://atcoder.jp/contests/abc127/tasks/abc127_d

 

概要

数字の書いてあるカードで遊ぶ。

最初にカードがN枚配られる。

その後、L枚のカードをRに書き直して良い、というチャンスがMセット与えられる。

操作によって総和を最大にし、総和を出力せよ。

考え方

L枚のカードをRに書き直す、じゃなくて、Rと書いたL枚のカードを山札に加える、と読み替える。

総和を最大にするには、その中の数字が大きい方からN枚取る。

 

書いた

 

結果

TLE(実行制限時間オーバー)

 

 

結果を受けて

 

 

…昔、こんな問題やらなかったっけ?

たくさんある候補を効率が良い順番にソートして、満足するまで上から入手していく…

 

!!

 

【AtCoderBeginnerContest121 C】勝つために苦手な剣を手に取ることにした話

この問題だ!!!!

 

同じようなコードをC++で書き直す

 

while文の中身は思いっきりコピペです。

 

結果

AC

 

この結果を受けて

昔、手も足も出ずにやられた(負けイベント)相手に、経験値を積んで再び戦いを挑むみたいなイベントでめっちゃくちゃ興奮しました。

 

 

でも、C#だと2秒超えでTLE食らうのに、C++だと0.2秒もかかってない、みたいな結果が出力されて。

困ったらC++を使うようにしようと思いました。TLEが来たらC++。


追記

Hashtableに値を突っ込むところが大きなボトルネックとなっていました。

手元の環境で動かして、そこだけでおよそ2000ms。TLEです。

 

データ構造による処理速度をきちんと把握しないといけないですね。

 

スポンサードリンク