Submission #2210401


Source Code Expand

#include <algorithm>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <vector>
using namespace std;
using ll = long long;

struct F {
  ll X, a, b, c;
  ll upper() { return a + (c - b); }
  F down(ll t) {
    ll rem = a;
    ll over = max(0ll, t - rem);
    ll na = max(0ll, a - t);
    ll nb = min(c, b + over);
    ll nc = c;
    return {X, na, nb, nc};
  }
  F up(ll t) {
    ll rem = X - upper();
    ll over = max(0ll, t - rem);
    ll na = min(X, a + t);
    ll nb = b;
    ll nc = max(b, c - over);
    return {X, na, nb, nc};
  }
  ll at(ll x) {
    if (x <= b) {
      return a;
    }
    if (x <= c) {
      return a + (x - b);
    }
    return upper();
  }
};

int main() {
  ll X;
  int K;
  while (cin >> X >> K) {
    ++K;
    vector<ll> r(K, 0ll);
    for (int i = 1; i < K; i++) {
      cin >> r[i];
    }
    vector<F> fs(K);
    fs[0] = {X, 0ll, 0ll, X};
    for (int i = 1; i < K; i++) {
      ll dr = r[i] - r[i - 1];
      if (i % 2 == 1) {
        fs[i] = fs[i - 1].down(dr);
      } else {
        fs[i] = fs[i - 1].up(dr);
      }
    }
    int Q;
    cin >> Q;
    int k = 0;
    for (int q = 0, k = 0; q < Q; q++) {
      ll t, a;
      cin >> t >> a;
      while (k + 1 < K && r[k + 1] <= t) {
        ++k;
      }
      ll p = fs[k].at(a);
      ll dt = t - r[k];
      ll ans;
      if (k % 2 == 0) {
        ans = max(0ll, p - dt);
      } else {
        ans = min(X, p + dt);
      }
      cout << ans << endl;
    }
  }
  return 0;
}

Submission Info

Submission Time
Task F - Sandglass
User kroton
Language C++14 (GCC 5.4.1)
Score 700
Code Size 1654 Byte
Status AC
Exec Time 333 ms
Memory 5120 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 700 / 700
Status
AC × 3
AC × 42
Set Name Test Cases
Sample 0_000.txt, 0_001.txt, 0_002.txt
All 0_000.txt, 0_001.txt, 0_002.txt, 1_003.txt, 1_004.txt, 1_005.txt, 1_006.txt, 1_007.txt, 1_008.txt, 1_009.txt, 1_010.txt, 1_011.txt, 1_012.txt, 1_013.txt, 1_014.txt, 1_015.txt, 1_016.txt, 1_017.txt, 1_018.txt, 1_019.txt, 1_020.txt, 1_021.txt, 1_022.txt, 1_023.txt, 1_024.txt, 1_025.txt, 1_026.txt, 1_027.txt, 1_028.txt, 1_029.txt, 1_030.txt, 1_031.txt, 1_032.txt, 1_033.txt, 1_034.txt, 1_035.txt, 1_036.txt, 1_037.txt, 1_038.txt, 1_039.txt, 1_040.txt, 1_041.txt
Case Name Status Exec Time Memory
0_000.txt AC 1 ms 256 KB
0_001.txt AC 1 ms 256 KB
0_002.txt AC 1 ms 256 KB
1_003.txt AC 236 ms 4352 KB
1_004.txt AC 251 ms 4352 KB
1_005.txt AC 255 ms 4352 KB
1_006.txt AC 235 ms 4352 KB
1_007.txt AC 244 ms 4352 KB
1_008.txt AC 259 ms 4352 KB
1_009.txt AC 235 ms 4480 KB
1_010.txt AC 244 ms 4480 KB
1_011.txt AC 258 ms 4480 KB
1_012.txt AC 249 ms 4480 KB
1_013.txt AC 247 ms 4480 KB
1_014.txt AC 261 ms 4480 KB
1_015.txt AC 241 ms 4608 KB
1_016.txt AC 249 ms 4608 KB
1_017.txt AC 333 ms 4608 KB
1_018.txt AC 245 ms 4736 KB
1_019.txt AC 258 ms 4736 KB
1_020.txt AC 266 ms 4736 KB
1_021.txt AC 248 ms 4608 KB
1_022.txt AC 263 ms 4864 KB
1_023.txt AC 268 ms 4864 KB
1_024.txt AC 255 ms 4608 KB
1_025.txt AC 259 ms 4864 KB
1_026.txt AC 284 ms 4864 KB
1_027.txt AC 264 ms 4736 KB
1_028.txt AC 265 ms 4736 KB
1_029.txt AC 276 ms 4992 KB
1_030.txt AC 266 ms 4736 KB
1_031.txt AC 274 ms 4736 KB
1_032.txt AC 281 ms 5120 KB
1_033.txt AC 229 ms 1024 KB
1_034.txt AC 229 ms 1024 KB
1_035.txt AC 268 ms 4864 KB
1_036.txt AC 236 ms 1152 KB
1_037.txt AC 236 ms 1152 KB
1_038.txt AC 280 ms 4992 KB
1_039.txt AC 239 ms 896 KB
1_040.txt AC 240 ms 1280 KB
1_041.txt AC 278 ms 5120 KB