logo

Écrire efficacement du code C/C++ en programmation compétitive

Tout d'abord, vous devez savoir Modèle Macro et Vecteurs avant de passer à la phase suivante ! 

  • Les modèles constituent la base de la programmation générique qui implique l'écriture de code d'une manière indépendante de tout type particulier.
  • Une Macro est un fragment de code auquel on a donné un nom. Chaque fois que le nom est utilisé, il est remplacé par le contenu de la macro.
  • Les vecteurs sont identiques aux tableaux dynamiques avec la possibilité de se redimensionner automatiquement lorsqu'un élément est inséré ou supprimé, leur stockage étant géré automatiquement par le conteneur.


Nous pouvons donc utiliser ces outils puissants pour écrire notre code de manière efficace.
Certaines des astuces intéressantes qui peuvent être utilisées dans la programmation compétitive sont présentées ci-dessous : 

    Utilisation de la boucle for basée sur une plage: Il s'agit d'une fonctionnalité très intéressante en C++ 11 et serait considérée comme la meilleure si vous souhaitez parcourir du début à la fin. Ce code montre comment utiliser des boucles for ranged pour parcourir un tableau et un vecteur : 
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; } 

Sortir:



0 1 2 3 4 1 2 3 4 5
    Liste des initialiseurs :Ce type est utilisé pour accéder aux valeurs d'une liste d'initialisation C++. Ici, les objets de ce type sont automatiquement construits par le compilateur à partir de déclarations de liste d'initialisation qui est une liste d'éléments séparés par des virgules et entourés d'accolades. 
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; } 

Sortir: 

One Two Three
    Attribution d'une valeur maximale ou minimale :Celui-ci est utile pour éviter des efforts supplémentaires lors de l’écriture des fonctions max() ou 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; } 

Sortir:

Max value = 11 Min value = -9
    Entrée/Sortie rapide en C/C++ :Dans la programmation compétitive, vous devez lire les entrées/sorties le plus rapidement possible pour gagner un temps précieux. 
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

Pour en savoir plus sur les entrées et sorties rapides Lire cet article . 

    Utiliser des macros comme boucle: Peut-être qu'il ne serait pas bon d'utiliser de telles macros car cela réduirait la lisibilité du code, mais pour écrire du code rapide, vous pouvez prendre ce risque ! 
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; } 

Sortir  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4
    En utilisant 'bits/stdc++.h' :Au lieu d'ajouter des tonnes de lignes #include, utilisez simplement #include Les fichiers incluent tous les fichiers d'en-tête dont vous aurez besoin dans une programmation compétitive, ce qui vous fera gagner beaucoup de temps.Conteneurs :L'utilisation de divers conteneurs comme une carte de liste vectorielle, etc. permet d'utiliser les fonctions prédéfinies et réduit considérablement la taille du code (le plus souvent)Cin et cout rapides :Si vous utilisez cin et cout pour les E/S, ajoutez simplement la ligne suivante juste après main(). 
std::ios_base::sync_with_stdio(false);
    auto:Utiliser auto pour déclarer les types de données peut faire gagner beaucoup de temps lors des concours de programmation. Lorsqu'une variable est définie comme compilateur automatique, il détermine son type au moment de la compilation.Bibliothèques et fonctions prédéfinies :Utilisation de fonctions intégrées telles que __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) etc. partout où cela peut être appliqué. Essayez d'apprendre les différentes fonctions disponibles dans algorithme bibliothèque de C++. Ils sont utiles la plupart du temps dans les programmes


En fin de compte, en utilisant ces astuces intelligentes, vous pouvez facilement écrire du code en un minimum de temps et de mots.

Créer un quiz