C/C++-koodin kirjoittaminen tehokkaasti kilpailevassa ohjelmoinnissa

Ensinnäkin sinun on tiedettävä Malli Makrot ja Vektorit ennen kuin siirryt seuraavaan vaiheeseen! 

  • Mallit ovat yleisen ohjelmoinnin perusta, joka sisältää koodin kirjoittamisen tavalla, joka on riippumaton tietystä tyypistä.
  • Makro on koodinpätkä, jolle on annettu nimi. Aina kun nimeä käytetään, se korvataan makron sisällöllä.
  • Vektorit ovat samoja kuin dynaamiset taulukot, joilla on mahdollisuus muuttaa itsensä kokoa automaattisesti, kun elementti lisätään tai poistetaan, ja säilö käsittelee niiden tallennustilan automaattisesti.


Joten voimme käyttää näitä tehokkaita työkaluja koodin kirjoittamiseen tehokkaalla tavalla.
Jotkut hienoista temppuista, joita voidaan käyttää kilpailullisessa ohjelmoinnissa, on esitetty seuraavasti: 

    Käyttämällä Range-pohjaista silmukkaa : Tämä on erittäin hieno ominaisuus C++11:ssä ja sitä pidettäisiin parhaana, jos haluat iteroida alusta loppuun. Tämä koodi näyttää, kuinka ranged for -silmukoita käytetään iteroitaessa taulukon ja vektorin läpi: 
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  ;   }   

Lähtö:

0 1 2 3 4 1 2 3 4 5 
    Alustusluettelo: Tätä tyyppiä käytetään C++-alustusluettelon arvojen käyttämiseen. Tässä kääntäjä rakentaa tämän tyyppiset objektit automaattisesti alustusluettelon ilmoituksista, joka on luettelo pilkuilla erotetuista elementeistä, jotka on suljettu aaltosulkeisiin. 
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  ;   }   

Lähtö: 

One Two Three 
    Maksimi- tai vähimmäisarvon määrittäminen: Tämä on hyödyllinen, jotta vältytään ylimääräiseltä vaivalla max()- tai min()-funktion kirjoittamisessa. 
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  ;   }   

Lähtö:

Max value = 11 Min value = -9 
    Nopea tulo/lähtö C/C++:ssa: Kilpailevassa ohjelmoinnissa sinun on luettava Input/Output mahdollisimman nopeasti arvokkaan ajan säästämiseksi. 
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 

Lisätietoja nopeasta syötöstä ja lähdöstä Lue tämä artikkeli . 

    Makron käyttö silmukan tapaan : Ehkä ei olisi hyvä käyttää sellaisia ​​makroja, koska se heikentäisi koodin luettavuutta, mutta nopean koodin kirjoittamiseen sen riskin voi ottaa! 
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  ;   }   

Lähtö  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    Käyttämällä "bits/stdc++.h": Sen sijaan, että lisäisit useita #include-rivejä, käytä vain #include Tiedostot sisältävät kaikki otsikkotiedostot, joita tarvitset kilpailevassa ohjelmoinnissa, mikä säästää paljon aikaasi. Säiliöt: Erilaisten säiliöiden, kuten vektoriluettelokartan jne., käyttö mahdollistaa ennalta määritettyjen toimintojen käytön ja pienentää koodin kokoa huomattavasti (useammin kuin ei). Nopea cin and cout: Jos käytät cin ja cout I/O:ssa, lisää vain seuraava rivi heti main(:n) jälkeen. 
std::ios_base::sync_with_stdio(false); 
    auto: Automaattinen käyttö tietotyyppien ilmoittamiseen voi säästää paljon aikaa ohjelmointikilpailujen aikana. Kun muuttuja määritellään automaattiseksi kääntäjäksi, se määrittää sen tyypin käännösajan aikana. Kirjastot ja ennalta määritetyt toiminnot: Käyttämällä sisäänrakennettuja toimintoja, kuten __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) jne. missä niitä voidaan käyttää. Yritä oppia erilaisia ​​toimintoja, jotka ovat käytettävissä algoritmi C++-kirjasto. Ne ovat hyödyllisiä useimmiten ohjelmissa


Viime kädessä näiden älykkäiden temppujen avulla voit kirjoittaa koodin helposti mahdollisimman lyhyessä ajassa ja sanoissa.

Luo tietokilpailu