logo

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-10)   cout << array[i] << ' ';  return 0; } 

Çıkış  

sorgu seçici
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