2010年08月15日
SRM479 Div2
今回は、前回やっとレートがちょっとだけ回復したので今回も勢いに乗りたい感じ。
250p TheAirTripDivTwo
飛行機に与えられた燃料で何回飛行ができるかを答える問題。燃料とかICFPを思い出す。
単純に燃料がゼロになるまで引いていけばいいはず・・・だったのに。変にfuelをいじったりとかi-1を返すとか汚いコードに。結果213.90p
#include <iostream> #include <vector> using namespace std; class TheAirTripDivTwo { public: int find(vector <int> flights, int fuel) { int i=0; while(fuel>=0){ fuel-=flights[i]; ++i; if(i>flights.size()) break; } return i-1; } };
根本的に直してPlacticeで投げてみたら247.16p。これくらいは速く書けないとなぁ。。。
#include <iostream> #include <vector> using namespace std; class TheAirTripDivTwo { public: int find(vector <int> fl, int f) { int i; for(i=0;i<fl.size();++i){ f-=fl[i]; if(f<0) break; } return i; } };
500p TheCoffeeTimeDivTwo
飛行機の乗客全員にコーヒーかお茶を配って最速を目指すスピードトライアル。
7人分のコーヒーor茶を容易するのに47秒、1席移動するごとに1秒、渡すのに4秒かかるそうな。
後ろから足せばいいってことに気づくのが遅すぎた。。
#include <iostream> #include <vector> #include <algorithm> #include <functional> using namespace std; class TheCoffeeTimeDivTwo { public: int find(int n, vector <int> tea) { sort(tea.begin(),tea.end(),greater<int>()); vector<int> coffee; int k=0; for(int i=n;i>0;--i){ if(k<tea.size()&&i==tea[k])++k; else coffee.push_back(i); } int time=n*4; for(int i=0;i<tea.size();i+=7){ time+=47; time+=tea[i]*2; } for(int i=0;i<coffee.size();i+=7){ time+=47; time+=coffee[i]*2; } return time; } };
1000p TheBoardingDivTwo
まだ解いてません。