logo

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:



Javascript-String ersetzen
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 . 

Ganzzahl-Doppel-Java
    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-10)   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