logo

Efficiënt schrijven van C/C++-code in competitief programmeren

Allereerst moet je er iets van weten Sjabloon Macro's En Vectoren voordat je doorgaat naar de volgende fase! 

  • Sjablonen vormen de basis van generiek programmeren, waarbij code wordt geschreven op een manier die onafhankelijk is van een bepaald type.
  • Een macro is een codefragment dat een naam heeft gekregen. Telkens wanneer de naam wordt gebruikt, wordt deze vervangen door de inhoud van de macro.
  • Vectoren zijn hetzelfde als dynamische arrays met de mogelijkheid om de grootte automatisch aan te passen wanneer een element wordt ingevoegd of verwijderd, waarbij de opslag automatisch door de container wordt afgehandeld.


We kunnen deze krachtige tools dus gebruiken om onze code op een effectieve manier te schrijven.
Enkele van de coole trucs die kunnen worden gebruikt bij competitief programmeren worden als volgt gegeven: 

    Bereik gebaseerd op lus gebruiken: Dit is een erg coole functie in C++11 en zou als de beste worden beschouwd als je van begin tot eind wilt herhalen. Deze code laat zien hoe je ranged for-lussen kunt gebruiken om door een array en een vector te itereren: 
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; } 

Uitgang:



0 1 2 3 4 1 2 3 4 5
    Initialisatielijst:Dit type wordt gebruikt om toegang te krijgen tot de waarden in een C++-initialisatielijst. Hier worden de objecten van dit type automatisch door de compiler samengesteld op basis van initialisatielijstdeclaraties, wat een lijst is van door komma's gescheiden elementen tussen 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; } 

Uitgang: 

One Two Three
    Maximale of minimale waarde toekennen:Deze is handig om extra inspanning bij het schrijven van de functie max() of min() te voorkomen. 
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; } 

Uitgang:

Max value = 11 Min value = -9
    Snelle invoer/uitvoer in C/C++:Bij competitief programmeren moet u Input/Output zo snel mogelijk lezen om kostbare tijd te besparen. 
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

Voor meer informatie over snelle invoer en uitvoer Lees dit artikel . 

    Macro's gebruiken als lus: Misschien zou het niet goed zijn om dergelijke macro's te gebruiken, omdat dit de leesbaarheid van de code zou verminderen, maar voor het schrijven van snelle code kun je dat risico nemen! 
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; } 

Uitvoer  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4
    'bits/stdc++.h' gebruiken:In plaats van heel veel #include-regels toe te voegen, gebruikt u gewoon #include De bestanden bevatten alle headerbestanden die u nodig heeft bij competitief programmeren, waardoor u veel tijd bespaart.Containers:Door verschillende containers te gebruiken, zoals een vectorlijstkaart enz., kunt u de vooraf gedefinieerde functies gebruiken en wordt de codegrootte aanzienlijk verkleind (vaker wel dan niet)Snel cin en cout:Als je cin en cout gebruikt voor I/O, voeg dan gewoon de volgende regel toe net na de main(). 
std::ios_base::sync_with_stdio(false);
    auto:Het gebruik van auto om datatypes te declareren kan veel tijd besparen tijdens programmeerwedstrijden. Wanneer een variabele als autocompiler wordt gedefinieerd, wordt tijdens het compileren het type ervan bepaald.Bibliotheken en vooraf gedefinieerde functies:Gebruik ingebouwde functies zoals __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) etc waar dat kan worden toegepast. Probeer verschillende functies te leren die beschikbaar zijn in algoritme bibliotheek van C++. Ze zijn meestal nuttig in programma's


Uiteindelijk kun je door deze slimme trucs te gebruiken eenvoudig code schrijven in een minimum aan tijd en woorden.

Quiz maken