Submission #3235838


Source Code Expand

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef pair<ll, ll> P;

#define each(i,a) for (auto&& i : a)
#define FOR(i,a,b) for (ll i=(a),__last_##i=(b);i<__last_##i;i++)
#define RFOR(i,a,b) for (ll i=(b)-1,__last_##i=(a);i>=__last_##i;i--)
#define REP(i,n) FOR(i,0,n)
#define RREP(i,n) RFOR(i,0,n)
#define __GET_MACRO3(_1, _2, _3, NAME, ...) NAME
#define rep(...) __GET_MACRO3(__VA_ARGS__, FOR, REP)(__VA_ARGS__)
#define rrep(...) __GET_MACRO3(__VA_ARGS__, RFOR, RREP)(__VA_ARGS__)
#define pb push_back
#define eb emplace_back
#define all(a) (a).begin(),(a).end()
#define chmin(x,v) x = min(x, v)
#define chmax(x,v) x = max(x, v)

const ll linf = 1e18;
const double eps = 1e-12;
const double pi = acos(-1);

template<typename T>
istream& operator>>(istream& is, vector<T>& vec) {
  each(x,vec) is >> x;
  return is;
}
template<typename T>
ostream& operator<<(ostream& os, const vector<T>& vec) {
  rep(i,vec.size()) {
    if (i) os << " ";
    os << vec[i];
  }
  return os;
}
template<typename T>
ostream& operator<<(ostream& os, const vector< vector<T> >& vec) {
  rep(i,vec.size()) {
    if (i) os << endl;
    os << vec[i];
  }
  return os;
}

const ll mod = 1e9+7;
// SegmentTree<int> seg(n, 0x7FFFFFFF, [](int a, int b){return min(a, b);});
template <typename T>
class SegmentTree {
  using func_t = function<T(T, T)>;
  const int n;
  const T id;
  func_t merge;
  vector<T> data;
  T sub(int l, int r, int node, int lb, int ub) {
    if (ub <= l || r <= lb) return id;
    if (l <= lb && ub <= r) return data[node];
    T vl = sub(l, r, node * 2 + 0, lb, (lb + ub) / 2);
    T vr = sub(l, r, node * 2 + 1, (lb + ub) / 2, ub);
    return merge(vl, vr);
  }
  int size(int n) {
    int res;
    for (res = 1; res < n; res <<= 1);
    return res;
  }
public:
  SegmentTree(int n, T id, func_t merge) :
    n(size(n)), id(id), merge(merge), data(size(n) * 2, id) {}
  void update(int p, T val) {
    assert (0 <= p && p < n);
    p += n;
    data[p] = val;
    while (p /= 2) {
      int l = p * 2, r = p * 2 + 1;
      data[p] = merge(data[l], data[r]);
    }
  }
  T find(int l, int r) {
    return sub(l, r, 1, 0, n);
  }
};


int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll n; cin >> n;
  vector<P> v;
  v.eb(-100000, -100000+1);
  rep(i, n) {
    ll x, d; cin >> x >> d;
    v.eb(x-d, x+d+1);
  }
  n = v.size();
  const ll m = 2100;
  vector<SegmentTree<ll>> dp(2, SegmentTree<ll>(m, 0, [](ll a, ll b) { return (a + b) % mod; }));
  dp[0].update(0, 1);
  rep(i, 1, n) {
    ll l, r; tie(l, r) = v[i];
    rep(j, r-l) {
      ll pos = min(v[i-1].second, max(l+j, v[i-1].first)) - v[i-1].first;
      assert(0 <= pos && pos <= v[i-1].second - v[i-1].first && pos <= m);
      ll val = dp[i+1&1].find(0, pos);
      // cout << pos << " " << j << " " << val << endl;
      dp[i&1].update(j, val);
    }
  }
  cout << dp[(n-1)&1].find(0, m) << endl;
}

Submission Info

Submission Time
Task D - ぽよぽよ
User drafear
Language C++14 (GCC 5.4.1)
Score 0
Code Size 3012 Byte
Status WA
Exec Time 186 ms
Memory 512 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 5
WA × 48
Set Name Test Cases
All 00-sample-00, 00-sample-01, handmade-00, largest-00, largest-01, largest-02, largest-03, largest-04, largest-05, random-00-0499, random-01-0439, random-02-0683, random-03-0329, random-04-0177, random-05-0106, random-06-0659, random-07-0421, random-08-0087, random-09-0455, random-10-0777, random-11-0148, random-12-0737, random-13-0119, random-14-0513, random-15-0237, random-16-0988, random-17-0322, random-18-0152, random-19-0612, random-20-0789, random-21-0213, random-22-0291, random-23-0159, random-24-0618, random-25-0601, random-26-0726, random-27-0491, random-28-0324, random-29-0429, random-30-0825, random-31-0645, random-32-0108, random-33-0203, random-34-0802, random-35-0155, random-36-0458, random-37-0674, random-38-0551, random-39-0063, random-40-0026, random-41-0545, sample-00, sample-01
Case Name Status Exec Time Memory
00-sample-00 AC 1 ms 512 KB
00-sample-01 AC 1 ms 512 KB
handmade-00 AC 1 ms 512 KB
largest-00 WA 183 ms 512 KB
largest-01 WA 186 ms 512 KB
largest-02 WA 182 ms 512 KB
largest-03 WA 184 ms 512 KB
largest-04 WA 184 ms 512 KB
largest-05 WA 182 ms 512 KB
random-00-0499 WA 1 ms 512 KB
random-01-0439 WA 1 ms 512 KB
random-02-0683 WA 2 ms 512 KB
random-03-0329 WA 2 ms 512 KB
random-04-0177 WA 1 ms 512 KB
random-05-0106 WA 1 ms 512 KB
random-06-0659 WA 2 ms 512 KB
random-07-0421 WA 2 ms 512 KB
random-08-0087 WA 1 ms 512 KB
random-09-0455 WA 2 ms 512 KB
random-10-0777 WA 3 ms 512 KB
random-11-0148 WA 2 ms 512 KB
random-12-0737 WA 4 ms 512 KB
random-13-0119 WA 2 ms 512 KB
random-14-0513 WA 3 ms 512 KB
random-15-0237 WA 2 ms 512 KB
random-16-0988 WA 6 ms 512 KB
random-17-0322 WA 3 ms 512 KB
random-18-0152 WA 2 ms 512 KB
random-19-0612 WA 5 ms 512 KB
random-20-0789 WA 6 ms 512 KB
random-21-0213 WA 2 ms 512 KB
random-22-0291 WA 3 ms 512 KB
random-23-0159 WA 2 ms 512 KB
random-24-0618 WA 5 ms 512 KB
random-25-0601 WA 5 ms 512 KB
random-26-0726 WA 6 ms 512 KB
random-27-0491 WA 5 ms 512 KB
random-28-0324 WA 4 ms 512 KB
random-29-0429 WA 5 ms 512 KB
random-30-0825 WA 8 ms 512 KB
random-31-0645 WA 7 ms 512 KB
random-32-0108 WA 2 ms 512 KB
random-33-0203 WA 3 ms 512 KB
random-34-0802 WA 9 ms 512 KB
random-35-0155 WA 3 ms 512 KB
random-36-0458 WA 6 ms 512 KB
random-37-0674 WA 8 ms 512 KB
random-38-0551 WA 7 ms 512 KB
random-39-0063 WA 2 ms 512 KB
random-40-0026 WA 1 ms 512 KB
random-41-0545 WA 8 ms 512 KB
sample-00 AC 1 ms 512 KB
sample-01 AC 1 ms 512 KB