PAT Clase B-Perro individual

La descripción del título
"Perro Soltero" es un apodo chino para personas solteras.

Esta pregunta le pide que averigüe a los invitados individuales de un grupo grande de decenas de miles de personas, para que pueda brindarles una atención especial.

Formato de entrada
Ingrese la primera línea para dar un número entero positivo N, que es el logaritmo de la pareja / pareja conocida; las
siguientes N líneas, cada línea da una pareja / pareja; por conveniencia, cada persona corresponde a un número de identificación, que es 5 dígitos (de 00000 a 99999), los ID están separados por espacios;
después de eso, se da un entero positivo M, que es el número total de personas que participan en la fiesta; la
siguiente línea da los ID de los M invitados, separados por espacios.

El título garantiza que nadie tiene bigamia o dos barcos.

Formato de salida
Primero, la primera línea
muestra el número total de invitados que realizaron pedidos; luego, la segunda línea enumera los invitados que realizaron pedidos en orden ascendente de identificación. Los ID están separados por un espacio y no debe haber espacios adicionales al principio y al final de la línea.

Muestra de entrada
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333

Muestra de salida
5
10000 23333 44444 55555 88888

Rango de datos
N ≤ 50000
M ≤ 10000


Solución de problemas
STL:

解题步骤

  1. Primero con mapcada mapeo de pareja mutua;
  2. Y luego setgrabado a la fiesta de la gente;
  3. Finalmente enumere todos setlos elementos, si su cónyuge no lo está set, luego agregue para ansir;
#include <iostream>
#include <unordered_map>
#include <vector>
#include <set>
using namespace std;

int n, m;
vector<string> ans;
unordered_map<string, string> H;
set<string> S;

int main()
{
    
    
	cin >> n;
	
	for (int i = 1; i <= n; i ++)
	{
    
    
		string a, b;
		cin >> a >> b;
		H[a] = b, H[b] = a;
	}
	
	cin >> m;
	
	for (int i = 1; i <= m; i ++) 
	{
    
    
		string s;
		cin >> s;
		S.insert(s);
	}
	
	for (auto &x : S)
		if(!S.count(H[x])) ans.push_back(x);
		
	cout << ans.size() << endl;
	
	bool flag = true;
	for (int i = 0; i < ans.size(); i ++)
		if(flag) cout << ans[i], flag = false;
		else cout << ' ' << ans[i];
	
	return 0;		
}

Malentendido: error del segmento del punto de prueba 2, pero no se puede encontrar ningún error

#include <iostream>
#include <map>
#include <set>
using namespace std;

int n, m;
map<string, string> H;
set<string> S;

int main()
{
    
    
	cin >> n;
	
	for (int i = 1; i <= n; i ++)
	{
    
    
		string a, b;
		cin >> a >> b;
		H[a] = b, H[b] = a;
	}
	
	cin >> m;
	
	for (int i = 1; i <= m; i ++) 
	{
    
    
		string s;
		cin >> s;
		S.insert(s);
	}
	
	for (auto &x : S)
		if(S.count(H[x])) 
		{
    
    
			S.erase(S.find(x));
			S.erase(S.find(H[x]));
			if(S.empty()) break;
		}
		
	cout << S.size() << endl;
	
	bool flag = true;
	for (auto &x : S)
		if(flag) cout << x, flag = false;
		else cout << ' ' << x;
	
	return 0;		
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46239370/article/details/113853007
Recomendado
Clasificación