解いた問題

2/04/2012

SRM479 Div1 Easy

250
後ろから配るだけ。vector<int>だとかint配列を使うと死ぬ。
const int N = 44777777 + 1;
bool tea[N];

class TheCoffeeTimeDivOne {
public:
  lli serve(int i, const bool type)
  {
    lli ret = 0;

    while (0 < i) {
      int cap = 7;
      int j = -1;
      while (0 < i && cap)  {
        if (tea[i] == type) {
          j = max(j, i);
          --cap;
        }
        --i;
      }
      if (j != -1) ret += 47 + 2 * j;
    }

    return ret;
  }
  long long find(int n, vector <int> T)
  {
    fill(tea, tea + N, false);
    for (int i = 0; i < T.size(); ++i) {
      tea[T[i]] = true;
    }

    return serve(n, false) + serve(n, true) + n * 4;
  }

};

0 件のコメント :

コメントを投稿