PAT 甲级 1063 Set Similarity

https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928

Given two sets of integers, the similarity of the sets is defined to be /, where Nc​​ is the number of distinct common numbers shared by the two sets, and Nt​​ is the total number of distinct numbers in the two sets. Your job is to calculate the similarity of any given pair of sets.

Input Specification:

Each input file contains one test case. Each case first gives a positive integer N (≤) which is the total number of sets. Then N lines follow, each gives a set with a positive M (≤) and followed by M integers in the range [0]. After the input of sets, a positive integer K (≤) is given, followed by K lines of queries. Each query gives a pair of set numbers (the sets are numbered from 1 to N). All the numbers in a line are separated by a space.

Output Specification:

For each query, print in one line the similarity of the sets, in the percentage form accurate up to 1 decimal place.

Sample Input:

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

Sample Output:

50.0%
33.3%

代码:

#include <bits/stdc++.h>
using namespace std;

int N, M;

int main() {
    scanf("%d", &N);
    set<int> s[N + 1];
    for(int i = 1; i <= N; i ++) {
        int x;
        scanf("%d", &x);
        for(int j = 0; j < x; j ++) {
            int y;
            scanf("%d", &y);
            s[i].insert(y);
        }
    }

    scanf("%d", &M);
    while(M --) {
        int a, b;
        scanf("%d%d", &a, &b);
        int num = 0;
        for(set<int>::iterator it = s[b].begin(); it != s[b].end(); it ++)
            if(s[a].find(*(it)) != s[a].end())
                num ++;

        printf("%.1f%%
", (double)num / (s[a].size() + s[b].size() - num) * 100);
    }
    return 0;
}

  前两天第一次交居然 0 !!!!! 今天才发现输出一位我输出两位。。。。 不用 set 会超时 

  后天出去玩 今天已经不是很想写了 哭唧唧

原文地址:https://www.cnblogs.com/zlrrrr/p/10196086.html