解いた問題

6/01/2012

SRM410 Div2 Easy

250

やるだけ



class ContiguousCacheEasy {
public:
  int bytesRead(int n, int k, vector <int> adr)
  {
    int ret = 0;

    int mn = 0;
    int mx = k - 1;

    for (int i = 0; i < (int)adr.size(); ++i) {
      if (mn <= adr[i] && adr[i] <= mx) {
      } else {
        int mn_ = mn;
        int mx_ = mx;
        while (mx < adr[i]) {
          ++mn;
          mx = mn + (k - 1);
        }
        while (adr[i] < mn) {
          --mn;
          mx = mn + (k - 1);
        }
        if (false) {
        } else if (mn_ <= mn && mn <= mx_) {
          ret += (mx - mn_) - (k - 1);
        } else if (mn_ <= mx && mx <= mx_) {
          ret += (mx_ - mn) - (k - 1);
        } else {
          ret += k;
        }
      }
    }

    return ret;
  }
};