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)のでこれが問題でした。。。