kotonoha_pcg@ぷろこんにっき

ここ(http://kotonoha-pcg.hatenablog.com/)の別館です、競プロの話が殆どです。最近mdモードに変えて一気に使い勝手が変わりました。

SRM 669 Div.2 Easy

 昨日20:00(JST)から出てました。0完です。分が悪いのは、サンプルI/O見つつやっと理屈を理解した辺りで(図や絵を書いたりして、筋道立てて説明できるようにはなった)20:51くらい。そっからなんとかコーディングしようとしたけどどうしようもなく眠いのと、理屈わかってるのにコードに落とせない・・・もとい書けなくて詰まっていた事です。

さっきArenaに入ってサマリーから何人かのコードを見ました。実際にコンテストに出て問題熟読して理屈理解してみての解答コード閲覧は、すごく(自分の発想力に対して)残念な気持ちになりました。大体の人はSTLのsort()使っている感じでした。で、「なにやってんだろう」と思いながら書いて通しました。

#include <bits/stdc++.h>
using namespace std;

class LiveConcert{
public:
 int maxHappiness(vector<int> h, vector<string> s){
  sort(s.begin(), s.end());
  s.erase(unique(s.begin(), s.end()), s.end());
  sort(h.begin(), h.end(), greater<int>());
  int ans=0;
  for(int i=0;i<s.size();i++){
   ans+=h[i];
  }
  return ans;
 }
};

最初に書いてた時はif文使って、それをforで回して、というのを考えていたのですが、解答コード見てたら「必ずしもSTL使わない発想は無い」ことに気づいたりした。もともとfor・ifを使おうとした理由が文字列配列sにおいての重複削除だったのですが、よくよく考えたら確かにunique()で重複要素削除できるなぁ、と思い、STLの良さを再認識しました。重複削除したらどうすればいいかは分かってた(あとはただ単に降順ソート+要素数を全て加算してreturn)のでこれが問題でした。。。

感想

 感想、なんか湧いてきません。全然鏡プロしてなかったなー、あとSRMのやり方を理解してなかったな、くらいです。今までCFくらいにしか参加してなかったので、どうコード書いたらいいか分からずおろおろしてて、解答コード見たら問題文に書いてあるまんまだったりしたのに気づいてショックだったりしました。
次のSRMは確か10/9前後だったと思うので、次も時間さえ合えば挑戦したいと思います。最近は時間ズレてて参加しやすそうな感じがします。そして時間かかってでもEasy通したいと思います。