Effizientes Schreiben von C/C++-Code in der Wettbewerbsprogrammierung

Zunächst müssen Sie darüber Bescheid wissen Vorlage Makros Und Vektoren bevor wir mit der nächsten Phase fortfahren! 

  • Vorlagen sind die Grundlage der generischen Programmierung, bei der Code unabhängig von einem bestimmten Typ geschrieben wird.
  • Ein Makro ist ein Codefragment, dem ein Name gegeben wurde. Bei jeder Verwendung des Namens wird dieser durch den Inhalt des Makros ersetzt.
  • Vektoren sind mit dynamischen Arrays identisch und können ihre Größe automatisch ändern, wenn ein Element eingefügt oder gelöscht wird, wobei ihre Speicherung automatisch vom Container verwaltet wird.


So können wir diese leistungsstarken Tools zum effektiven Schreiben unseres Codes nutzen.
Einige der coolen Tricks, die bei der Wettbewerbsprogrammierung verwendet werden können, sind wie folgt: 

    Verwenden einer Range-basierten for-Schleife : Dies ist eine sehr coole Funktion in C++11 und wird als die beste angesehen, wenn Sie vom Anfang bis zum Ende iterieren möchten. Dieser Code zeigt, wie man Ranged-For-Schleifen verwendet, um ein Array und einen Vektor zu durchlaufen: 
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  ;   }   

Ausgabe:

0 1 2 3 4 1 2 3 4 5 
    Initialisierungsliste: Dieser Typ wird verwendet, um auf die Werte in einer C++-Initialisierungsliste zuzugreifen. Hier werden die Objekte dieses Typs vom Compiler automatisch aus Initialisierungslistendeklarationen erstellt, bei denen es sich um eine Liste von durch Kommas getrennten Elementen in geschweiften Klammern handelt. 
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  ;   }   

Ausgabe: 

One Two Three 
    Maximal- oder Minimalwert zuweisen: Dies ist nützlich, um zusätzlichen Aufwand beim Schreiben der Funktionen max() oder min() zu vermeiden. 
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  ;   }   

Ausgabe:

Max value = 11 Min value = -9 
    Schnelle Eingabe/Ausgabe in C/C++: Bei der kompetitiven Programmierung müssen Sie Eingabe/Ausgabe so schnell wie möglich lesen, um wertvolle Zeit zu sparen. 
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 

Erfahren Sie mehr über schnelle Ein- und Ausgabe Lesen Sie diesen Artikel . 

    Verwendung von Makros als for-Schleife : Vielleicht wäre es nicht gut, solche Makros zu verwenden, da es die Lesbarkeit des Codes beeinträchtigen würde, aber um schnellen Code zu schreiben, können Sie dieses Risiko eingehen! 
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  -1    0  )         cout      < <     array  [  i  ]      < <     ' '  ;      return     0  ;   }   

Ausgabe  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Verwendung von „bits/stdc++.h“: Anstatt Unmengen von #include-Zeilen hinzuzufügen, verwenden Sie einfach #include Die Dateien enthalten alle Header-Dateien, die Sie für die Wettbewerbsprogrammierung benötigen, wodurch Sie viel Zeit sparen. Behälter: Die Verwendung verschiedener Container wie Vektorlistenkarten usw. ermöglicht die Verwendung der vordefinierten Funktionen und reduziert die Codegröße erheblich (meistens). Schnelles Cin und Cout: Wenn Sie cin und cout für I/O verwenden, fügen Sie einfach die folgende Zeile direkt nach main() ein. 
std::ios_base::sync_with_stdio(false); 
    Auto: Die Verwendung von „auto“ zum Deklarieren von Datentypen kann bei Programmierwettbewerben viel Zeit sparen. Wenn eine Variable als Auto-Compiler definiert ist, bestimmt sie ihren Typ während der Kompilierungszeit. Bibliotheken und vordefinierte Funktionen: Verwenden Sie integrierte Funktionen wie __gcd(AB), swap _builtin_popcount(R), _builtin_clz(R) usw., wo immer dies möglich ist. Versuchen Sie, die verschiedenen verfügbaren Funktionen kennenzulernen Algorithmus Bibliothek von C++. Sie sind in den meisten Fällen in Programmen nützlich


Letztendlich können Sie mit diesen cleveren Tricks ganz einfach und mit minimalem Zeit- und Wortaufwand Code schreiben.

Quiz erstellen