C++ 3

[C++] 시간 측정 방법

C언어에서 시간을 측정할 때 time.h헤더를 사용하거나 windows.h헤더를 사용하여 시간을 측정한 기억이 있다. time은 직관적이었지만 정밀한 측정이 힘들었고, windows.h의 QueryPerformanceCounter 함수를 이용한 측정은 꽤 정밀하지만 비직관적이었다. (리눅스에서는 사용도 못한다.) C++는 보다 정밀한 측정을 기본적으로 제공한다. #include 시간의 신 크로노스(Chronos)에서 따왔다고 한다. 핵심 기능인 시간을 측정하는 코드는 다음과 같다. std::chrono::system_clock::time_point start = std::chrono::system_clock::now(); // do Something; std::chrono::duration duratio..

[C++] 난수 생성 방법

C를 먼저 공부하고 C++를 공부하는 사람이라면 난수를 생성할 때 stdlib.h(cstdlib)에 있는 rand 함수를 사용했을 것이다. rand함수를 사용하면 난수가 생성되는것 처럼 보이지만 실제로 여러번 실행해보면 같은 결과가 나온다. rand함수를 대략적으로 구성하면 다음과 같을 것이다. int myRand() { static int seed = 94263523; seed = (seed + 998244353) % (1000000007); return seed; } 여기에서 시드넘버가 일정하기 때문에 언제나 같은 수가 나올 것이고 실행해보면 난수가 생성된것 처럼 보인다. 이를 해결하기 위해 시드넘버를 현재시간 기준으로 설정하곤 한다. #include int myRand() { static int s..

[알고리즘] PBDS

지난 UCPC 2022에 PBDS가 나왔다. 몰랐던 자료구조니까 공부하긴 했는데 이게 생각보다 강력한 것 같다. C++에서 지원하는데 이게 있으면 세그트리를 안짜도 된다.(근데 짜는게 맘편하긴 하다.) 감사한 곳 https://codeforces.com/blog/entry/11080 C++ STL: Policy based data structures - Codeforces codeforces.com 일단 g++에서만 가능하다고 한다.(unfortunately only for the GNU C++) 개념적으로는 set(map)인데 순서를 기록한다고 한다. 특정 수가 몇번째로 큰지, 특정 수보다 작은 수가 몇개 있는지를 구할 수 있는 내장 자료구조이다. 사용하려면 헤더를 따로 인클루드 하고 네임스페이스도 쓰..