728x90
728x90
PS 혹은 CP를 하다 보면 이론상 통과가 힘든 시간 복잡도이지만 그럼에도 불구하고 시도를 하고 싶을 때 대표적으로 IO 오버헤드를 최대한으로 줄이는 방법을 채택한다.
이 포스트에서는 버퍼같은 이론적 배경은 접어두고 즉시 사용할 수 있는 코드를 제공하고자 한다.
첨부한 코드는 USACO GUIDE에 수록된 코드를 일부 개조했으며 리눅스 환경이 아닌 곳에서도 바로 사용할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
inline namespace Input {
const int BUF_SZ = 1 << 17;
char buf[BUF_SZ];
int pos;
int len;
char next_char() {
if (pos == len) {
pos = 0;
len = (int)fread(buf, 1, BUF_SZ, stdin);
if (!len) {
return EOF;
}
}
return buf[pos++];
}
// change to long long if you need
int read_int() {
int x;
char ch;
int sgn = 1;
while (!isdigit(ch = next_char())) {
if (ch == '-') {
sgn *= -1;
}
}
x = ch - '0';
while (isdigit(ch = next_char())) {
x = x * 10 + (ch - '0');
}
return x * sgn;
}
string read_string() {
string ret;
char ch;
while (isspace(ch = next_char())) {}
ret.push_back(ch);
while (not isspace(ch = next_char()))
ret.push_back(ch);
return ret;
}
} // namespace Input
inline namespace Output {
const int BUF_SZ = 1 << 17;
char buf[BUF_SZ];
int pos;
void flush_out() {
fwrite(buf, 1, pos, stdout);
pos = 0;
}
void write_char(char c) {
if (pos == BUF_SZ) {
flush_out();
}
buf[pos++] = c;
}
void write_int(long long x, char delim = '\n') {
static char num_buf[100];
if (x < 0) {
write_char('-');
x *= -1;
}
int len = 0;
for (; x >= 10; x /= 10) {
num_buf[len++] = (char)('0' + (x % 10));
}
write_char((char)('0' + x));
while (len) {
write_char(num_buf[--len]);
}
write_char(delim);
}
// auto-flush output when program exits
void init_output() { assert(atexit(flush_out) == 0); }
} // namespace Output
|
cs |
fast io의 위력은 대충 N이 100만을 넘어갈 때 유효하다.
196ms 제출이 cpp에서 싱크 해제한 한 코드이고 104ms 제출이 위 코드로 입력을 받은 코드이다. 100만 기준 대략 100ms 정도의 이득을 볼 수 있으므로 대회 상황에서는 AC를 받는데 충분한 도움이 될 수 있다.
728x90
728x90
'CP Algorithm & Knowledge' 카테고리의 다른 글
매내처 알고리즘(Manacher's algorithm) (0) | 2022.07.20 |
---|---|
KMP(Knuth Morris Pratt) 알고리즘 복습 노트 (0) | 2022.07.15 |
수열의 홀짝성 feat. [ICPC] 백준 5000 - 빵 정렬 (0) | 2022.03.21 |
편집 거리(Edit Distance) 알고리즘 (0) | 2022.02.13 |
Rerooting Technique on Tree (0) | 2021.09.28 |