Rekabetçi programlamada C/C++ kodunu verimli bir şekilde yazma

Öncelikle bilmeniz gerekenler Şablon Makrolar Ve Vektörler bir sonraki aşamaya geçmeden önce! 

  • Şablonlar, herhangi bir türden bağımsız bir şekilde kod yazmayı içeren genel programlamanın temelidir.
  • A Macro is a fragment of code which has been given a name. Ad her kullanıldığında makronun içeriğiyle değiştirilir.
  • Vektörler, bir öğe eklendiğinde veya silindiğinde, depoları kap tarafından otomatik olarak işlenerek kendisini otomatik olarak yeniden boyutlandırabilme özelliğine sahip dinamik dizilerle aynıdır.


Böylece kodumuzu etkili bir şekilde yazmak için bu güçlü araçları kullanabiliriz.
Rekabetçi programlamada kullanılabilecek harika püf noktalarından bazıları aşağıda verilmiştir: 

    Aralık tabanlı for döngüsünü kullanma : Bu, C++ 11'deki çok harika bir özelliktir ve baştan sona yineleme yapmak istiyorsanız en iyisi olarak kabul edilir. Bu kod, bir dizi ve bir vektör boyunca yineleme yapmak için ranged for döngülerinin nasıl kullanılacağını gösterir: 
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  ;   }   

Çıkış:

0 1 2 3 4 1 2 3 4 5 
    Başlatıcı listesi: Bu tür bir C++ başlatma listesindeki değerlere erişmek için kullanılır. Burada bu türdeki nesneler, derleyici tarafından kaşlı ayraçlar içine alınmış virgülle ayrılmış öğelerin bir listesi olan başlatma listesi bildirimlerinden otomatik olarak oluşturulur. 
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  ;   }   

Çıkış: 

One Two Three 
    Maksimum veya Minimum değerin atanması: Bu, max() veya min() işlevini yazarken ekstra çaba harcamamak için kullanışlıdır. 
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  ;   }   

Çıkış:

Max value = 11 Min value = -9 
    C/C++'da Hızlı Giriş/Çıkış: Rekabetçi programlamada değerli zamandan tasarruf etmek için Giriş/Çıkış'ı mümkün olduğunca hızlı okumalısınız. 
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 

Hızlı giriş ve çıkış hakkında daha fazla bilgi edinmek için Bu makaleyi okuyun . 

    Makroları for döngüsü olarak kullanma : Belki bu tür makroları kullanmak kodun okunabilirliğini azaltacağından iyi olmaz ama hızlı kod yazmak için bu riski alabilirsiniz! 
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  ;   }   

Çıkış  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4 
    'bits/stdc++.h' kullanarak: Tonlarca #include satırı eklemek yerine sadece #include kullanın Dosyalar, rekabetçi programlamada ihtiyaç duyacağınız tüm başlık dosyalarını içerir ve zamandan önemli ölçüde tasarruf sağlar. Konteynerler: Vektör listesi haritası vb. gibi çeşitli kapsayıcıların kullanılması, önceden tanımlanmış işlevlerin kullanılmasına olanak tanır ve kodun boyutunu önemli ölçüde azaltır (çoğunlukla) Hızlı cin ve cout: G/Ç için cin ve cout kullanıyorsanız, aşağıdaki satırı main()'ın hemen sonrasına ekleyin. 
std::ios_base::sync_with_stdio(false); 
    otomatik: Veri türlerini bildirmek için auto'yu kullanmak, programlama yarışmaları sırasında çok zaman kazandırabilir. Bir değişken otomatik derleyici olarak tanımlandığında, derleme zamanı sırasında türünü belirler. Kitaplıklar ve önceden tanımlanmış işlevler: Uygulanabileceği her yerde __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) vb. gibi yerleşik işlevleri kullanma. Mevcut farklı işlevleri öğrenmeye çalışın. algoritma C++ kütüphanesi. Çoğu zaman programlarda faydalıdırlar.


Sonuçta bu akıllı hileleri kullanarak minimum sürede ve kelimeyle kolayca kod yazabilirsiniz.

Test Oluştur