Skriva C/C++-kod effektivt i konkurrenskraftig programmering

Först och främst behöver du veta om Mall Makron och Vektorer innan du går vidare till nästa fas! 

  • Ett makro är ett fragment av kod som har fått ett namn. Närhelst namnet används ersätts det av innehållet i makrot.
  • Vektorer är samma som dynamiska arrayer med möjligheten att ändra storlek automatiskt när ett element infogas eller tas bort och deras lagring hanteras automatiskt av behållaren.


Så vi kan använda dessa kraftfulla verktyg för att skriva vår kod på ett effektivt sätt.
Några av de coola knep som kan användas i konkurrenskraftig programmering ges enligt följande: 

    Använder intervallbaserat för loop : Detta är en väldigt cool funktion i C++11 och skulle anses vara bäst om du vill iterera från början till slut. Den här koden visar hur man använder ranged for loops för att iterera genom en array och en vektor: 
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  ;   }   

Produktion:

0 1 2 3 4 1 2 3 4 5 
    Initialiseringslista: Denna typ används för att komma åt värdena i en C++-initieringslista. Här konstrueras objekten av denna typ automatiskt av kompilatorn från initialiseringslistdeklarationer som är en lista med kommaseparerade element inneslutna i klammerparenteser. 
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  ;   }   

Produktion: 

One Two Three 
    Tilldela högsta eller lägsta värde: Den här är användbar för att undvika extra ansträngning att skriva max() eller min() funktion. 
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  ;   }   

Produktion:

Max value = 11 Min value = -9 
    Snabb in-/utgång i C/C++: I konkurrenskraftig programmering måste du läsa Input/Output så snabbt som möjligt för att spara värdefull tid. 
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 

För att veta mer om snabb input och output Läs den här artikeln . 

    Använda makron som för loop : Det kanske inte vore bra att använda sådana makron eftersom det skulle minska läsbarheten av kod men för att skriva snabb kod kan du ta den risken! 
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  ;   }   

Produktion  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Använder 'bits/stdc++.h': Istället för att lägga till massor av #include-rader, använd bara #include Filerna innehåller alla header-filer du behöver i konkurrenskraftig programmering och sparar mycket tid. Behållare: Att använda olika behållare som vektorlistkarta etc gör det möjligt för en att använda de fördefinierade funktionerna och minskar storleken på koden avsevärt (oftast) Snabb cin och cout: Om du använder cin och cout för I/O lägg bara till följande rad precis efter main(). 
std::ios_base::sync_with_stdio(false); 
    bil: Att använda auto för att deklarera datatyper kan spara mycket tid under programmeringstävlingar. När en variabel definieras som automatisk kompilator bestämmer dess typ under kompileringstiden. Bibliotek och fördefinierade funktioner: Använd inbyggda funktioner som __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) etc varhelst det kan tillämpas. Försök att lära dig olika funktioner som finns tillgängliga i algoritm bibliotek av C++. De är användbara oftast i program


Genom att använda dessa smarta knep kan du enkelt skriva kod på ett minimum av tid och ord.

Skapa frågesport