Ayuda con programa en-lenguaje en c o c++

Iniciado por Calos, 12 Septiembre 2020, 09:55 AM

0 Miembros y 1 Visitante están viendo este tema.

Calos

Tengo que realizar un programa que me diga cuantos animales pasarón por ambos mares el ejercicio es el siguiente:
Descripción
Las lágrimas de Alicia no formaron un mar como todos creían, sino dos, uno por cada ojo. Y por lo tanto, algunos animales descuidados se mojaron varias veces y tuvieron que correr varias carreras para secarse. Cuando Alicia se percató de la situación, decidió contar cuántos animales se mojaron en los dos mares de lágrimas.

Entrada
Un entero  seguido de  parejas de enteros. Cada pareja de enteros  y  representa a un animal  que se mojó en el mar .


Salida
Un entero que sea la cantidad de animales que se mojaron en los dos mares.


Rangos
Puedes suponer que 1<=N<=100000 , que i<=A<=50000  y que 1<=M<=2.


Entrada                               Salida
5                                        1
3    1
1    2
4    1
1    2
3    2



Mi código es el siguiente:
Código (cpp) [Seleccionar]

#include <iostream>
#include <map>

int main(int argc, char** argv)
{
   int N=100000, rango=2, AnimalesEnDosMares=0, acumulador=0;
   scanf("%d", &N);
   int matriz[N][rango];
   for(int i=0; i<N; i++)
   {
       scanf("%d", &matriz[i][0]);
       scanf("%d", &matriz[i][1]);
   }
   for(int i=0; i<N; i++)
   {
       for(int k=0; k<N; k++)
       {
           if(matriz[k][0]==matriz[i][0])
           {
               if(matriz[k][1]==1)
               {
                   acumulador++;
               }
               if(matriz[k][1]==2)
               {
                   acumulador++;
               }
           }
       }

           if(acumulador==2)
       {
           AnimalesEnDosMares++;
       }
   }
       printf("\n%d", AnimalesEnDosMares);
   return 0;
}



Mi problema es que el ultimo acumulador siempre me da 1, aunque mete que dos animales pasaron por ambos mares.



MOD: Uso de etiquetas de Código GeSHi

MAFUS

Se me ocurre un árbol binario con dos datos:
Un entero que representa el ID del animal.
Un campo de bits de dos bits (o un entero que representa banderas) indicando si nadó en el primer mar y en el segundo.

Funciona así:

Cuando recibes el ID de un animal primero miras si está en el árbol. Si no está lo añades: a la rama de la izquierda si el número es menor al del nodo y a la derecha si el número es mayor al del nodo. Si no conoces el algoritmo hay muchos ejemplos en internet.
Ahora indicar en que mar a ha nadado usando el cambo de bits (o las banderas).

Una vez que has consumido todas las entradas vuelves a recorrer el árbol informando únicamente de los nodos que tienen han tienen los dos campos de bits activos (o un 3 si has usado un entero para banderas).