結論から言えば、色々と悲惨なSRMだった。
終了後div1の900Ptのシステムテストケースがおかしいので全部テスト落ちるけど気にするなというダイアログが出る。
しかし、問題なのはそんなことではなく、採点方式だった。
システムテスト落ちると0点じゃなくて0点からその点数分さらにマイナスされる
それで-1300点とかなってる人がいて悲惨だった。僕は-30点だった。
結局バグなのかルールなのかわかんなかったけど、いつもの採点方式になったみたい。
まあそんなこんなでシステムテストに2時間以上掛かった。
Writerもさぞかし大変だっただろうに。誰だったんだろう。
250Pt
お店の数とそれぞれのお店の開・閉店時間と移動に掛かる時間が与えられる。
お店の位置は循環している。それぞれのお店から商品一つずつ買いたい。
番号順に回っていった場合にどれだけのお店で買えるか。適当な説明だけどこんなかんじ
233点くらいでSubmitしたけど実装適当すぎたせいでnowが算術オーバーフローしてWA。マジ死にたい
Faild system test 0.0Pt
/* Wrong source */ #define rep(i,n) for(int i=0;i<n;i++) class CircleMarket { public: int makePurchases(vector <int> oT, vector <int> cT, int tT) { int ret = 0; int now = 0; vector<bool> check(oT.size()); rep(k,1000001){ rep(i,oT.size()){ if( !check[i] && oT[i] <= now && now <= cT[i]){ ret++; check[i] = true; } now += tT; } } return ret; } }
500Pt
預言者が云々、卵が先か鶏が先かみたいな。
問題文よくわかんなかったので解くのやめた。
Opened 0.0Pt
900Pt
なんか総和の総和の最小を求める問題みたいな解釈した。
ずっと算術オーバーフローが原因だと思っていたんだけどあとでテストしてみたらそうじゃないらしい。
/* Wrong source */ #define rep(i,n) for(int i=0;i<n;i++) bool cmp(const pair<string,int>& A,const pair<string,int>B){ return A.second < B.second; } class BatchSystem { public: vector <int> schedule(vector <int> duration, vector <string> user) { vector <int> ret; map<string,vector<int> > pd; map<string,int> mdata; vector< pair<string,int> > data; rep(i,user.size()){ pd[user[i]].push_back(i); mdata[user[i]] += duration[i]; } map<string,int>::iterator it = mdata.begin(); while( it != mdata.end() ){ data.push_back( (*it) ); ++it; } sort(data.begin(),data.end(),cmp); rep(i,data.size()){ rep(j,pd[data[i].first].size()){ ret.push_back(pd[data[i].first][j]); } } return ret; } }
Challenged 0.0Pt
Challenge
しかし・・・今回Challengeしまくって、同じテストケースで4回中4回成功という快挙を成し遂げたので
50.0 * 4 = 200.0Pt
結果
0.0 + 0.0 + 0.0 + 200.0 = 200.0Pt ハンパネエ
それでもなんとか291位にとどまることができた。
てか200.0Ptで291位って今回のSRMホント恐怖だった。あともう一人チャレンジしようか悩んだんだけど踏み出せなかった自分。あと50点あれば130位台だったしもっと言えば250点通しとけば普通に50位台だったなあと。
算術オーバーフローを意識しようと思います。反省。
Rate 722→789
むう、緑コーダーはようなりたい。