
PS를 함에 있어 후술할 몇몇 트릭들이 문제를 더 효율적으로 풀도록 도움을 줄 수도 있다.
그러나 일부 기법들은 근본적으로 별로 좋지 않은 방법임을 항상 염두에 두어야 한다.
따라서 현명하게 상황에 맞춰서 적절히 취사선택해서 사용하는 것을 권장한다.
#define all(x) begin(x), end(x) : 컨테이너의 모든 원소에 대한 매크로
#define int long long : int 범위 초과 시, 일괄 수정이 필요할 때 (signed main())
#define rep(i, a, b) for (int i = (a); i < (b); ++i) : 반복문 매크로
#define debug(x) cout << #x << " is " << x << '\n' : 디버깅 (문자열화 연산자 #)
lower_bound(all(v), x) : x 보다 크거나 같은 첫번째 원소의 위치
upper_bound(all(v), x) : x 보다 큰 첫번째 원소의 위치
next_permutation(all(v)) : 사전순으로 다음에 위치한 순열
prev_permutation(all(v)) : 사전순으로 이전에 위치한 순열
iota(all(v), x) : 컨테이너 첫 번째를 x 로 하고, ++x 를 하며 채움
for(auto& x : v) : 범위 기반 for 루프 (원본)
for(auto x : v) : 범위 기반 for 루프 (사본)
pair<int, int> p = {1, 2} : 중괄호 초기화 (=make_pair(1, 2))
auto [a, b] = p : 구조적 바인딩 (= auto a = p.first, b = p.second)
max({a,b,c,...}) : 최대 원소
min({a,b,c,...}) : 최소 원소
a ^ b ^ c ^ min({ a,b,c }) ^ max({ a,b,c }) : 중간값
acos(-1) : π
n & 1 : 홀짝 판별
(n >> k) & 1 : n의 2진법 상 k + 1 번째 비트
cin.tie(0)->sync_with_stdio(0) : 한 줄로 줄일 수 있다.
cout << format("{:.2f}", x) : 포맷 출력. (백준 C++23 이상)
cout << " \n"[i + 1 == N] : 반복문이 끝나는 경우 \n, 그외
"FFFFFFDCBAA"[n / 10] : 문자열로 조건문 압축 ( 백준 9498 시험 성적 )
cout << dec/oct/hex << x : 10진수, 8진수, 16진수 변환