답안 #654974

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
654974 2022-11-02T09:59:04 Z valerikk Lightning Rod (NOI18_lightningrod) C++17
100 / 100
475 ms 246188 KB
#include <bits/stdc++.h>

using namespace std;

#include <cstdio>

/** Interface */

inline int readChar();
template <class T = int>
inline T readInt();
template <class T>
inline void writeInt(T x, char end = 0);
inline void writeChar(int x);
inline void writeWord(const char *s);

/** Read */

static const int buf_size = 4096;

inline int getChar() {
    static char buf[buf_size];
    static int len = 0, pos = 0;
    if (pos == len) pos = 0, len = fread(buf, 1, buf_size, stdin);
    if (pos == len) return -1;
    return buf[pos++];
}

inline int readChar() {
    int c = getChar();
    while (c <= 32) c = getChar();
    return c;
}

template <class T>
inline T readInt() {
    int s = 1, c = readChar();
    T x = 0;
    if (c == '-') s = -1, c = getChar();
    while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getChar();
    return s == 1 ? x : -x;
}

/** Write */

static int write_pos = 0;
static char write_buf[buf_size];

inline void writeChar(int x) {
    if (write_pos == buf_size)
        fwrite(write_buf, 1, buf_size, stdout), write_pos = 0;
    write_buf[write_pos++] = x;
}

template <class T>
inline void writeInt(T x, char end) {
    if (x < 0) writeChar('-'), x = -x;

    char s[24];
    int n = 0;
    while (x || !n) s[n++] = '0' + x % 10, x /= 10;
    while (n--) writeChar(s[n]);
    if (end) writeChar(end);
}

inline void writeWord(const char *s) {
    while (*s) writeChar(*s++);
}

struct Flusher {
    ~Flusher() {
        if (write_pos) fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
    }
} flusher;

void flush() {
    if (write_pos) {
        fwrite(write_buf, 1, write_pos, stdout), write_pos = 0;
    }
}

const int N = 1e7 + 7;

int n;
int x[N], y[N];
int st[N], top = 0;

bool protect(int i, int j) {
	return abs(x[i] - x[j]) <= y[i] - y[j];
}

int main() {
	n = readInt();
	for (int i = 0; i < n; ++i) {
		x[i] = readInt();
		y[i] = readInt();
	}
	for (int i = 0; i < n; ++i) {
		while (top > 0 && protect(i, st[top - 1])) {
			--top;
		}
		if (top == 0 || !protect(st[top - 1], i)) {
			st[top++] = i;
		}
	}
	writeInt(top, '\n');

	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Correct 296 ms 226632 KB Output is correct
2 Correct 310 ms 225884 KB Output is correct
3 Correct 311 ms 219924 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 316 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 312 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 316 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 312 KB Output is correct
8 Correct 0 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 316 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 312 KB Output is correct
8 Correct 0 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 328 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 1 ms 212 KB Output is correct
3 Correct 0 ms 340 KB Output is correct
4 Correct 0 ms 316 KB Output is correct
5 Correct 0 ms 212 KB Output is correct
6 Correct 0 ms 212 KB Output is correct
7 Correct 0 ms 312 KB Output is correct
8 Correct 0 ms 316 KB Output is correct
9 Correct 1 ms 212 KB Output is correct
10 Correct 1 ms 340 KB Output is correct
11 Correct 1 ms 340 KB Output is correct
12 Correct 1 ms 328 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 9 ms 5420 KB Output is correct
15 Correct 9 ms 5116 KB Output is correct
16 Correct 10 ms 4732 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 320 ms 198880 KB Output is correct
2 Correct 310 ms 198624 KB Output is correct
3 Correct 302 ms 193868 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 296 ms 226632 KB Output is correct
2 Correct 310 ms 225884 KB Output is correct
3 Correct 311 ms 219924 KB Output is correct
4 Correct 0 ms 212 KB Output is correct
5 Correct 1 ms 212 KB Output is correct
6 Correct 0 ms 340 KB Output is correct
7 Correct 0 ms 316 KB Output is correct
8 Correct 0 ms 212 KB Output is correct
9 Correct 0 ms 212 KB Output is correct
10 Correct 0 ms 312 KB Output is correct
11 Correct 0 ms 316 KB Output is correct
12 Correct 1 ms 212 KB Output is correct
13 Correct 1 ms 340 KB Output is correct
14 Correct 1 ms 340 KB Output is correct
15 Correct 1 ms 328 KB Output is correct
16 Correct 1 ms 340 KB Output is correct
17 Correct 9 ms 5420 KB Output is correct
18 Correct 9 ms 5116 KB Output is correct
19 Correct 10 ms 4732 KB Output is correct
20 Correct 320 ms 198880 KB Output is correct
21 Correct 310 ms 198624 KB Output is correct
22 Correct 302 ms 193868 KB Output is correct
23 Correct 475 ms 246188 KB Output is correct
24 Correct 406 ms 227624 KB Output is correct
25 Correct 399 ms 210144 KB Output is correct