logo

Scrivere codice C/C++ in modo efficiente nella programmazione competitiva

Prima di tutto devi sapere Modello Macro E Vettori prima di passare alla fase successiva! 

  • I modelli sono il fondamento della programmazione generica che prevede la scrittura di codice in modo indipendente da qualsiasi tipo particolare.
  • Una Macro è un frammento di codice a cui è stato assegnato un nome. Ogni volta che viene utilizzato il nome viene sostituito dal contenuto della macro.
  • I vettori sono gli stessi degli array dinamici con la possibilità di ridimensionarsi automaticamente quando un elemento viene inserito o eliminato e la loro archiviazione viene gestita automaticamente dal contenitore.


Quindi possiamo utilizzare questi potenti strumenti per scrivere il nostro codice in modo efficace.
Alcuni dei trucchi interessanti che possono essere utilizzati nella programmazione competitiva sono forniti come segue: 

    Utilizzo del ciclo for basato su intervallo: Questa è una funzionalità molto interessante in C++ 11 e sarebbe considerata la migliore se si desidera eseguire l'iterazione dall'inizio alla fine. Questo codice mostra come utilizzare i cicli for ranged per scorrere un array e un vettore: 
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; } 

Produzione:



0 1 2 3 4 1 2 3 4 5
    Elenco degli inizializzatori:Questo tipo viene utilizzato per accedere ai valori in un elenco di inizializzazione C++. Qui gli oggetti di questo tipo vengono costruiti automaticamente dal compilatore dalle dichiarazioni dell'elenco di inizializzazione che è un elenco di elementi separati da virgole racchiusi tra parentesi graffe. 
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; } 

Produzione: 

One Two Three
    Assegnazione del valore massimo o minimo:Questo è utile per evitare sforzi aggiuntivi nella scrittura della funzione max() o min(). 
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; } 

Produzione:

Max value = 11 Min value = -9
    Ingresso/uscita veloce in C/C++:Nella programmazione competitiva è necessario leggere Input/Output il più velocemente possibile per risparmiare tempo prezioso. 
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

Per saperne di più sull'input e l'output rapidi Leggi questo articolo . 

array Java da elencare
    Utilizzo delle macro come ciclo for: Forse non sarebbe opportuno utilizzare tali macro poiché ridurrebbe la leggibilità del codice, ma per scrivere codice veloce puoi correre questo rischio! 
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; } 

Produzione  

4 5 6 9 22 11 5 6 9 22 11 11 22 9 6 5 4
    Utilizzando 'bits/stdc++.h':Invece di aggiungere tonnellate di righe #include, usa semplicemente #include I file includono tutti i file di intestazione di cui avrai bisogno nella programmazione competitiva, risparmiando molto tempo.Contenitori:L'uso di vari contenitori come la mappa dell'elenco vettoriale ecc. consente di utilizzare le funzioni predefinite e riduce considerevolmente la dimensione del codice (il più delle volte)Cin e cout veloci:Se usi cin e cout per I/O aggiungi semplicemente la seguente riga subito dopo main(). 
std::ios_base::sync_with_stdio(false);
    auto:Usare auto per dichiarare i tipi di dati può far risparmiare molto tempo durante le gare di programmazione. Quando una variabile viene definita come compilatore automatico, ne determina il tipo durante la fase di compilazione.Librerie e funzioni predefinite:Utilizzando funzioni integrate come __gcd(AB) swap _builtin_popcount(R) _builtin_clz(R) ecc. ovunque ciò possa essere applicato. Prova ad apprendere le diverse funzioni disponibili in algoritmo libreria di C++. Sono utili la maggior parte delle volte nei programmi


In definitiva, utilizzando questi trucchi intelligenti puoi scrivere facilmente il codice in una quantità minima di tempo e parole.

Crea quiz