PAT B1065 Chien unique (25 points)

Insérez la description de l'image ici
Dans cette question, la quantité de données a atteint 10 ^ 5. Si la violence à double boucle est de complexité temporelle O (n2), il y aura certainement un délai d'expiration du point de test.
Par conséquent, vous devez penser à l'espace pour le temps. Pour cette question, vous pouvez ouvrir deux tables de hachage, l'une est utilisée pour enregistrer chaque conjoint numéroté (la valeur par défaut n'existe pas -1) et l'autre est utilisée pour enregistrer si un nombre est parmi les participants du groupe entrés est apparu (la valeur par défaut est false).
Entrez d'abord les n paires de conjoints saisis dans la question dans la première table de hachage, puis modifiez la valeur de la deuxième table de hachage correspondant aux m participants saisis dans la question sur vrai (indiquant qu'ils sont apparus).
Enfin, affichez ceux qui sont célibataires (c'est-à-dire que la valeur de la première table de hachage est -1 ou la valeur du conjoint dans la deuxième table de hachage est fausse).

#include <cstdio>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;

int spouse[100010];
bool cunzai[100010] = {
    
    false};

void init(){
    
    
	for(int i=0; i<=100010; i++){
    
    
		spouse[i] = -1;
	}
}

int main(){
    
    
	init();
	int n;
	scanf("%d", &n);
	for(int i=0; i<n; i++){
    
    
		int a, b;
		scanf("%d %d", &a, &b);
		spouse[a] = b;
		spouse[b] = a;
	}
	
	scanf("%d", &n);
	int arr[n];
	int num = 0;
	for(int i=0; i<n; i++){
    
    
		int bh;
		scanf("%d", &bh);
		cunzai[bh] = true;
		arr[num++] = bh;
	}
	int res[n];
	int r_num = 0;
	for(int i=0; i<num; i++){
    
    
		if(spouse[arr[i]]==-1 || !cunzai[spouse[arr[i]]]){
    
    
			res[r_num++] = arr[i];
		}
	}
	
	sort(res, res+r_num);
	printf("%d\n", r_num);
	for(int i=0; i<r_num; i++){
    
    
		printf("%05d", res[i]);
		if(i != r_num-1) printf(" ");
	}
	
	return 0;
}


Je suppose que tu aimes

Origine blog.csdn.net/weixin_45964844/article/details/113757809
conseillé
Classement