logo

경쟁 프로그래밍에서 효율적으로 C/C++ 코드 작성

우선 당신이 알아야 할 것은 주형 매크로 그리고 벡터 다음 단계로 넘어가기 전에! 

  • 템플릿은 특정 유형에 독립적인 방식으로 코드를 작성하는 일반 프로그래밍의 기초입니다.
  • 매크로는 이름이 지정된 코드 조각입니다. 이름이 사용될 때마다 매크로의 내용으로 대체됩니다.
  • 벡터는 요소가 삽입되거나 삭제될 때 자동으로 크기를 조정하고 해당 저장소가 컨테이너에 의해 자동으로 처리되는 기능을 갖춘 동적 배열과 동일합니다.


따라서 우리는 효과적인 방법으로 코드를 작성하기 위해 이러한 강력한 도구를 사용할 수 있습니다.
경쟁 프로그래밍에 사용할 수 있는 몇 가지 멋진 트릭은 다음과 같습니다. 

    범위 기반 for 루프 사용: 이것은 C++11의 매우 멋진 기능이며 처음부터 끝까지 반복하려는 경우 가장 적합하다고 간주됩니다. 이 코드는 범위가 지정된 for 루프를 사용하여 배열과 벡터를 반복하는 방법을 보여줍니다. 
CPP
// C++ program to demonstrate range based for // loops for accessing vector and array elements #include   #include  using namespace std; int main() {  // Create a vector object that  // contains 5 elements  vector<int> vec = {0 1 2 3 4};  // Type inference by reference using auto.  // Range based loops are preferred when no  // modification is needed in value  for (const auto &value : vec)  cout << value << ' ';  cout << 'n';  // Basic 5 element integer array  int array[]= {1 2 3 4 5};  for (const auto &value: array)  cout << value << ' ';  return 0; } 

산출:



0 1 2 3 4 1 2 3 4 5
    초기화 목록:이 유형은 C++ 초기화 목록의 값에 액세스하는 데 사용됩니다. 여기서 이 유형의 객체는 중괄호로 묶인 쉼표로 구분된 요소 목록인 초기화 목록 선언에서 컴파일러에 의해 자동으로 생성됩니다. 
CPP
#include   template<typename T> void printList(std::initializer_list<T> text) {  for (const auto & value: text)  std::cout << value << ' '; } // Driver program int main() {  // Initialization list  printList( {'One' 'Two' 'Three'} );  return 0; } 

산출: 

One Two Three
    최대값 또는 최소값 지정:이는 max() 또는 min() 함수를 작성하는 데 추가 노력을 피하는 데 유용합니다. 
CPP
#include   // Call by reference is used in x template<typename T typename U> static inline void amin(T &x U y) {  if (y < x)  x = y; } // call by reference is used in x template<typename T typename U> static inline void amax(T &x U y) {  if (x < y)  x = y; } // Driver program to find the Maximum and Minimum value int main() {  int max_val = 0 min_val = 1e5;  int array[]= {4 -5 6 -9 2 11};  for (auto const &val: array)  // Same as max_val = max (max_val val)  // Same as min_val = min (min_valval)  amax(max_val val) amin (min_val val);  std::cout << 'Max value = ' << max_val << 'n'  << 'Min value = ' << min_val;  return 0; } 

산출:

Max value = 11 Min value = -9
    C/C++의 빠른 입출력:경쟁 프로그래밍에서는 귀중한 시간을 절약하기 위해 가능한 한 빨리 입력/출력을 읽어야 합니다. 
C
#include    template<typename T> void scan(T &x) {  x = 0;  bool neg = 0;  register T c = getchar();  if (c == '-')  neg = 1 c = getchar();  while ((c < 48) || (c > 57))  c = getchar();  for ( ; c < 48||c > 57 ; c = getchar());  for ( ; c > 47 && c < 58; c = getchar() )  x= (x << 3) + ( x << 1 ) + ( c & 15 );  if (neg) x *= -1; } template<typename T> void print(T n) {  bool neg = 0;  if (n < 0)  n *= -1 neg = 1;  char snum[65];  int i = 0;  do  {  snum[i++] = n % 10 + '0';  n /= 10;  }  while (n);  --i;  if (neg)  putchar('-');  while (i >= 0)  putchar(snum[i--]);  putchar('n'); } // Driver Program int main() {  int value;  // Taking input  scan(value);  // Printing output  print(value);  return 0; } 
Input: 756 Output: 756

빠른 입력 및 출력에 대해 자세히 알아보려면 이 기사를 읽어보세요 . 

    매크로를 for 루프로 사용하기: 아마도 그러한 매크로를 사용하면 코드의 가독성이 떨어지기 때문에 좋지 않을 수도 있지만, 빠른 코드를 작성하려면 위험을 감수할 수 있습니다! 
CPP
#include    using namespace std; #define rep(in) for (i = 0; i < n; ++i) #define REP(ikn) for (i = k; i <= n; ++i) #define REPR(ikn) for (i = k; i >= n; --i) // Driver program to test above Macros int main() {  int i;  int array[] = {4 5 6 9 22 11};  int size= sizeof(array)/sizeof(array[0]);    // Default 0 index based loop  rep(i size)   cout << array[i] << ' ';  cout<<'n';    // Starting index based loop  REP(i 1 size-1)   cout << array[i] << ' ';  cout<<'n';    // Reverse for loop  REPR(i size-10)   cout << array[i] << ' ';  return 0; } 

산출  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4
    'bits/stdc++.h' 사용:수많은 #include 줄을 추가하는 대신 #include를 사용하세요. 파일에는 경쟁 프로그래밍에 필요한 모든 헤더 파일이 포함되어 있어 많은 시간을 절약할 수 있습니다.컨테이너:벡터 목록 맵 등과 같은 다양한 컨테이너를 사용하면 사전 정의된 기능을 사용할 수 있고 코드 크기가 상당히 줄어듭니다(대체로).빠른 cin 및 cout:I/O에 cin 및 cout을 사용하는 경우 main() 바로 뒤에 다음 줄을 추가하면 됩니다. 
std::ios_base::sync_with_stdio(false);
    자동:자동을 사용하여 데이터 유형을 선언하면 프로그래밍 대회 중에 많은 시간을 절약할 수 있습니다. 변수가 자동 컴파일러로 정의되면 컴파일 타임에 해당 유형이 결정됩니다.라이브러리 및 사전 정의된 함수:__gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) 등과 같은 내장 함수를 적용할 수 있는 모든 곳에서 사용합니다. 에서 사용할 수 있는 다양한 기능을 배워보세요. 연산 C++ 라이브러리. 프로그램에서 대부분 유용합니다.


궁극적으로 이러한 현명한 트릭을 사용하면 최소한의 시간과 단어로 코드를 쉽게 작성할 수 있습니다.

퀴즈 만들기