답안 #701883

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
701883 2023-02-22T08:49:02 Z lto5 Lightning Rod (NOI18_lightningrod) C++14
66 / 100
2000 ms 6804 KB
#include <bits/stdc++.h>

using namespace std;

void debug_out() { cerr << '\n'; }
template <typename Head, typename... Tail>
void debug_out(Head H, Tail... T) {
  cerr << " " << H;
  debug_out(T...);
}
#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)

namespace sub1 {
void solve(int n) {
  vector<pair<int, int>> vt;
  stack<int> st;
  while (n--) {
    int x, y;
    cin >> x >> y;
    vt.emplace_back(x + y, y - x);
  }
  sort(vt.begin(), vt.end());
  for (auto [x, y] : vt) {
    while (!st.empty() && st.top() <= y) {
      st.pop();
    }
    st.push(y);
  }
  // while (!st.empty()) {
  //   debug(st.top());
  //   st.pop();
  // }
  cout << st.size();
}
}  // namespace sub1

namespace sub2 {
const int N = 1e7 + 5;
pair<int, int> st[N];

void solve(int n) {
  int top = 0;
  st[0].second = -2e9;
  while (n--) {
    int x, y;
    cin >> x >> y;
    int nx = x + y;
    int ny = y - x;
    x = nx, y = ny;
    debug(x, y);
    while (top > 0 && st[top].first <= x) {
      top--;
    }
    // debug(top);
    if (top > 0 && st[top].second >= y) {
      continue;
    }
    // debug('.', top);
    st[++top] = {x, max(y, st[top - 1].second)};
  }
  cout << top;
}
}  // namespace sub2

int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
#define task "a"
  if (fopen(task ".inp", "r")) {
    freopen(task ".inp", "r", stdin);
    freopen(task ".out", "w", stdout);
  }
  int n;
  cin >> n;
  if (n <= 1e6) {
    sub1::solve(n);
    return 0;
  }
  sub2::solve(n);
  return 0;
}

Compilation message

lightningrod.cpp: In function 'void sub1::solve(int)':
lightningrod.cpp:23:13: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   23 |   for (auto [x, y] : vt) {
      |             ^
lightningrod.cpp: In function 'void sub2::solve(int)':
lightningrod.cpp:59:8: warning: operation on 'top' may be undefined [-Wsequence-point]
   59 |     st[++top] = {x, max(y, st[top - 1].second)};
      |        ^~~~~
lightningrod.cpp: In function 'int main()':
lightningrod.cpp:71:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   71 |     freopen(task ".inp", "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
lightningrod.cpp:72:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   72 |     freopen(task ".out", "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2029 ms 6804 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 324 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 328 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 324 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 328 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 324 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 328 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 324 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 0 ms 212 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 1 ms 328 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 1 ms 212 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 340 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 57 ms 4928 KB Output is correct
15 Correct 53 ms 5020 KB Output is correct
16 Correct 38 ms 4792 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2047 ms 5560 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 2029 ms 6804 KB Time limit exceeded
2 Halted 0 ms 0 KB -