Como esse problema envolve saber a quantidade de identificadores que foram duplicados, uma simples operação com conjuntos não conseguirá resolver o problema. Entretanto, a solução continua simples, basta usar um vetor para monitorar quantos bilhetes daquele identificador já foram lidos até o momento e contabilizar que tal identificador foi duplicado quando, e somente quando, encontrarmos o mesmo bilhete pela segunda vez. Isso é porque nós só precisamos saber se ele foi duplicado e, para isso, apenas dois bilhetes bastam.
#include<string.h>#include<stdio.h>intmain(){int bilhetes[10001];int N, M, T, resposta;while(scanf("%d%d",&N,&M)){if(!N &&!M) break; resposta =0;memset(bilhetes,0,sizeof(bilhetes));for(int i =0; i < M; ++i){scanf("%d",&T);++bilhetes[T];if(bilhetes[T] ==2) ++resposta; }printf("%d\n", resposta); }return0;}
#include<iostream>#include<cstring>usingnamespace std;intmain(){intbilhetes[10001];int N, M, T, resposta;while(cin >> N >> M){if(!N &&!M) break; resposta =0;memset(bilhetes,0,sizeof(bilhetes));for(int i =0; i < M; ++i){ cin >> T;++bilhetes[T];if(bilhetes[T] ==2) ++resposta; } cout << resposta << endl; }return0;}
whileTrue:try: N, M = [int(x)for x ininput().strip().split(' ')]if(N ==0and M ==0):break bilhetes = [int(x)for x ininput().strip().split(' ')] resposta =0 contador = [0for i inrange(N +1)]for bilhete in bilhetes: contador[bilhete]+=1if(contador[bilhete]==2): resposta +=1print(resposta)exceptEOFError:break