C++ Preprocessor #define

En C++ existe el preprocessor #define muy utilizado en las competencias.

Este consiste en ‘reemplazar’ el texto definido por otro. Sigue leyendo

Anuncios

Tipos De Datos En C++

Tipo Tam. Bits Dígitos de precisión Rango Min Rango Max
bool 8 0 0 1
char 8 2 -128 127
signed char 8 2 -128 127
unsigned char 8 2 0 255
short int 16 4 -32,768 32,767
unsigned short int 16 4 0 65,535
int 32 9 -2,147,483,648 2,147,483,647
unsigned int 32 9 0 4,294,967,295
long int 32 9 -2,147,483,648 2,147,483,647
unsigned long int 32 9 0 4,294,967,295
long long int 64 18 9,223,372,036,854,775,808 9,223,372,036,854,775,807
unsigned long long int 64 18 0 18,446,744,073,709,551,615
float 32 6 1.17549e-38 3.40282e+38
double 64 15 2.22507e-308 1.79769e+308
long double 96 18 3.3621e-4932 1.18973e+4932

Plantillas Para Concursos De Programacion

Todos sabemos que en un concurso de programacion el tiempo es limitado y mientras mas tiempo ahorremos mas tiempo tendremos para dedicarnos a lo que vamos que es resolver problemas.

Desde hace un tiempo se utilizan plantillas en las competencias de programacion a continuacion doy algunos ejemplos de plantillas.

C++

#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
using namespace std;

#define PB          push_back
#define MP          make_pair
#define S           size()
#define x           first
#define y           second
typedef long long   LL;

int main(){
    //freopen("a.in", "r", stdin);
    //freopen("a.out", "w", stdout);

}

Java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;
import java.math.BigInteger;

public class Plusandxor implements Runnable {
    private void solve() throws IOException {
        writer.println(-1);//example for print -1
    }

    public static void main(String[] args) {
        new Plusandxor().run();
    }

    BufferedReader reader;
    StringTokenizer tokenizer;
    PrintWriter writer;

    public void run() {
        try {
            reader = new BufferedReader(new InputStreamReader(System.in));
            tokenizer = null;
            writer = new PrintWriter(System.out);
            solve();
            reader.close();
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    int nextInt() throws IOException {
        return Integer.parseInt(nextToken());
    }

    long nextLong() throws IOException {
        return Long.parseLong(nextToken());
    }

    double nextDouble() throws IOException {
        return Double.parseDouble(nextToken());
    }

    String nextToken() throws IOException {
        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            tokenizer = new StringTokenizer(reader.readLine());
        }
        return tokenizer.nextToken();
    }
}

Como se puede ver las plantillas tienen declaradas algunas librerias y codigo que facilita la implementacion de las soluciones en la competencia.

Templates C++

En C++ contamos con los templates, estos nos ayudan a hacer funciones que aceptan diferentes tipos de parametros como argumentos.
A continuacion un ejemplo simple:

#include <iostream>
#include <string>
using namespace std;
template<class T> T suma(const T & a, const T & b) {
    return a + b;
}
int main(){
    cout<< suma(1, 2) <<endl;
    cout<< suma(1.2, 1.3) <<endl;
    cout<< suma(string("hola "), string("templates")) <<endl;
}

Como se puede ver la funcion acepta diferentes tipos de parametros y retorna la suma.

Funciones de ordenamiento

Algunos algoritmos están explicados en el Blog.
Algoritmo de ordenamiento – Insertion Sort
Algoritmo de ordenamiento – Quick Sort
Algoritmo de ordenamiento – Merge Sort

Existen muchas facilidades al usar C++, una es el ordenamiento ya que tenemos funciones para ordenar rápidamente vectores o arrays.

Heap sort O(Nlog(N)):

void ordenar(int a[5]){
    make_heap(a, a+5);
    sort_heap(a, a+5);
}

StableSort O(N*log(N^2)):

void ordenar(int a[5]){
    stable_sort(a, a+5);
}

Como se ve C++ nos brinda lo necesario para realizar un ordenamiento, ahora que es mejor utilizar vector de la STL, ej:

vector<int> a(5);
a[0] = 1, a[1] = 10, ..........
sort(a.begin(), a.end());

No olviden incluir <algorithm> para utilizar las funciones en su codigo.

Tiempo de ejecución – C++

Para hallar el tiempo de ejecución de un programa, solo hace falta incluir algunas lineas de código.
incluir librería: #include <time.h>
función que retorna el tiempo del sistema operativo en mili-segundos: clock()

#include <time.h>
#include <iostream>
using namespace std;
int main() {
    double ini = clock();
    int c = 0;for(int i = 0; i<20000000 ; i++){c++;}//cualquier proceso
    cout<<"tiempo en segundos: "<<double(clock()-ini)/1000.0<<endl;
}