Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

quitZAUMMM

[Resolvido] Usando map

Recommended Posts

buenas galera..

entaum to tentando fazer um desafio do site do spoj q chama eleições..

fiz o algoritmo normal, soh q do jeito q fiz da TLE, ow seja extrapola o tempo limite de 1s.

fiz em java usando ArrayList e com isso verificando o numero e ocorrencias de um determinado numero; soh q se em C num passo em java a leitura é lenta de + e deu TLE tbm..

me deram a dica de usar o stl map do C++. soh q naum sei como contar o numero de ocorrencias de um numero.

vejam oq tentei até agora:

#include <iostream>
#include <map>
#include <stdio.h>
//#include <string.h>
using namespace std;
int main () {
	map<int, string> mymap;
	map<int, string >::iterator MyIterMap;
	mymap[2]="2";
	mymap[2]="1";
	mymap[2]="1";
	mymap[2]="1";
	mymap[1]="1";
	//cout << "mymap['a'] is ";
	//cout << "mymap['b'] is ";
	//cout << "mymap['c'] is ";
	//cout << "mymap['d'] is ";
	//cout << "mymap now contains " << (int) mymap.size() << " elements.";
	int algo = 0;
	map<int,string>::iterator iter;// = mymap.find(1);
	MyIterMap = mymap.begin();
	while( MyIterMap != mymap.end() ) {
		//iter = mymap.find(1);
		//if(iter != mymap.end()) algo++;
		//algo++;
	   int values = (*MyIterMap).first;
	   //if ((values.compare("b") == 0)) printf("s");
	   //else printf("n");
	   //cout <<  mymap[values] <<endl;
	   string teste = mymap[values];
	   if (mymap[values] == "1") algo++;
	   //if(mymap.count(1) > 0) algo++;
//	   if(mymap.contains(1)) algo++;
	   MyIterMap++;
   }

  printf("%d", algo);
}

se alguem puder me ajudar, e tbm, o map ordena sozinho?

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

é depois de penar muito consegui.

use arraylist(java), multimap, vector, set. faziam certo + estourava o tempo.

consegui receber aceito no desafio com esse código:

 

#include <vector>
#include <algorithm>
#include <iostream>
#include <map>
using namespace std;
int main()
{
int votos, i, num, maior, contagem, candidato;
map<int, int> mapa;
	map<int,int>::iterator it;
while(scanf("%d", &num) != EOF){
   mapa.erase ( mapa.begin(), mapa.end());
   maior = candidato = -1;
   contagem = 0;
		for (i = 0; i < num; i++){
			scanf("%d", &votos);
			if (mapa.find(votos) == mapa.end()) mapa[votos] = 1;
			else mapa[votos]++;
		}
		for ( it=mapa.begin(); it != mapa.end(); it++ ){
			if ((*it).second > maior) {
				maior = (*it).second;
				candidato = (*it).first;
			}
		}
		cout << "\n" << candidato << "\n";
}
return 0;
}

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.