OmegaUP: Problema 10959 - El castigo de Aveam

Descripción Del Problema

Aveam es una estudiante de preparatoria que le gusta mucho la informática. A su mamá no le agrada mucho la idea de que se la pase todo el día en la computadora, así que decidió castigarla. Hay una habitación en su casa que se utiliza como bodega, la cual tiene muchos objetos tirados en el piso. El castigo consiste en que tiene que contar cuantos objetos de cada tipo hay en el piso de la bodega (ver casos de ejemplo para comprender mejor). La habitación se representa como una cuadrícula de 1 <= M <= 100 filas por 1 <= N <= 100 columnas, y los tipos de objetos se representan con un número 1 <= x <= 2,500.

Aveam decidió hacer uso de sus conocimientos para realizar esta tarea. Desarrolló un programa que por medio de una fotografía, pudiera asignarle un número a cada tipo de objeto y representarlo en una cuadrícula del mismo tamaño que la bodega, como se muestra a continuación:

Dado un conjunto de objetos, deberás imprimir cuántos objetos de cada tipo hay en la bodega.

Datos de Entrada

En la primera línea, los enteros M y N que denotan el tamaño de la habitación. En cada una de las siguientes M íneas, enteros que denotan el tipo de objeto que se encuentra tirado en la bodega.

Datos de Salida

La cantidad de cada tipo de objeto que se encuentra en la bodega ordenados de menor a mayor por el tipo. Siendo el primer elemento la cantidad de objetos del tipo de menor valor, y el último elemento la cantidad de objetos del tipo de mayor valor (es decir, si se tienen objetos de tipo 5,2,7 y 4 a salida tiene que ser la cantidad de objetos de tipo 2, 4, 5 y 7 Respectivamenente.

Código

Este Código esta escrito en lenguaje C++ con el Estandar 2011 y debe ser compilado usando el compilador "cpp11-gcc"

#include <iostream>
#include <vector>
#include <map>

using namespace std;

map<long, size_t> Conteo( vector<long> numeros )
{
    map<long, size_t> listaDeConteo;
    pair<map<long, size_t>::iterator, bool> valorInsertado;

    for(auto it = numeros.begin(); it != numeros.end(); it++ )
    {
        valorInsertado = listaDeConteo.insert( pair<long, size_t>(*it, 1) );
        if(valorInsertado.second == false)
        {
                valorInsertado.first->second++;
        }
    }

    return listaDeConteo;
}

int main() {
    std::cin.tie(nullptr);
    std::ios_base::sync_with_stdio(false);

    // TODO: fixme.
    int x,y, tmp;
    vector<long> numeros;

    cin >> x >> y;

    for( int i = 0; i < x*y; ++i )
    {
        cin >> tmp;
        numeros.push_back(tmp);
    }

    map<long, size_t> lista = Conteo( numeros );
    for( auto i = lista.begin(); i != lista.end(); i++ )
    {
        cout << i->second << " ";
    }
    return 0;
}

Referencias

https://omegaup.com/arena/problem/El-castigo-de-Aveam/#problems

Comentarios