☀L2-005 Similitud de conjuntos (25 puntos) [PTA] [Uso básico del conjunto]

Dados dos conjuntos de números enteros, su similitud se define como: N c / N t × 100%. Donde N c es el número de enteros desiguales compartidos por ambos conjuntos, y N t es el número de enteros desiguales compartidos por los dos conjuntos. Su tarea es calcular la similitud de cualquier par de conjuntos dados.

Formato de entrada:

Ingrese la primera línea para dar un número entero positivo N (≤50), que es el número de conjuntos. Las siguientes N filas, cada fila corresponde a una colección. A cada conjunto se le asigna primero un entero positivo M (≤10 4), que es el número de elementos del conjunto, seguido de M enteros en el intervalo [0,10 9].

La siguiente línea da un entero positivo K (≤2000), seguido de K líneas, cada línea corresponde al número de un par de conjuntos a calcular (los conjuntos están numerados de 1 a N). Los números están separados por espacios.

Formato de salida:

Para cada par de conjuntos que deban calcularse, envíe su similitud en una línea, que es un número porcentual con 2 lugares decimales.

Muestra de entrada:

3
3 99 87 101
4 87 101 5 87
7 99 101 18 5 135 18 99
2
1 2
1 3

Salida de muestra:

50.00%
33.33%

Primero comprenda el significado de la pregunta

[El conjunto ha deduplicado automáticamente todos los números]

Nc es el número de elementos iguales en los dos conjuntos

Nt es el número de todos los elementos en los dos conjuntos menos el número de Nc

-------------------------------------------------- -------------------------

[Uso del conjunto]

s [i] .insert (x); // Insertar x en el conjunto s [i]

for ( auto it = s [a] .begin (); it! = s [a] .end (); it ++) // Llamar a los elementos del conjunto [a] a través de un iterador

        {

            if (s [b] .count (* it)) // * ¿El elemento representado por él existe en el conjunto s [b]

            {

                igual ++;

            }

        } 

código ac: 

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<set>
#include<queue>
#include<stack>
using namespace std;
const int maxv = 100100;
set<int>s[55];
int main()
{
    int N;
    cin>>N;
    for(int i=1;i<=N;i++)
    {
        int M;
        cin>>M;
        for(int j=0;j<M;j++)
        {
            int x;
            cin>>x;
            s[i].insert(x);
        }
    }
    int K;
    cin>>K;
    for(int i=0;i<K;i++)
    {
        int a,b;
        cin>>a>>b;
        int equal=0;
        for(auto it=s[a].begin();it!=s[a].end();it++)
        {
            if(s[b].count(*it))
            {
                equal++;
            }
        }
        printf("%.2f",equal*1.0/(s[a].size()+s[b].size()-equal)*100);
        cout<<"%\n";
    }
    return 0;
}


Referencia: https://blog.csdn.net/CC_1012/article/details/88043754?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522160627472919725255546573%2522%252C%2522scm%2522%252403A725.1% % 257D & request_id = 160627472919725255546573 & biz_id = 0 & utm_medium = distrib.pc_search_result.none-task-blog-2 ~ blog ~ sobaiduend ~ default-2-88043754.pc_v1_rank_blog_v1 & utm_term + set L2-005 ++ puntos 2518.2 y similar

Supongo que te gusta

Origin blog.csdn.net/qq_43660826/article/details/110133255
Recomendado
Clasificación