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

    まだ解いてません。



    tanitanin at 23:44│Comments(0)TrackBack(0)TopCoder | プログラミング

    トラックバックURL

    コメントする

    名前
    URL
     
      絵文字