PAT Advanced 1063 Set Similarity (25分)(STL)

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%

这题考察了集合去重,只有set可以,用unordered_map都会超时

#include <iostream>
#include <vector>
#include <set>
using namespace std;
int main() {
    int N, M, K, tmp, A, B;
    scanf("%d", &N);
    vector<set<int>> v(N + 1);
    for(int i = 1; i <= N; i++) {
        scanf("%d", &M);
        while(M--){
            scanf("%d", &tmp);
            v[i].insert(tmp);
        }
    }
    scanf("%d", &K);
    while(K--) {
        int coun = 0;
        scanf("%d%d", &A, &B);
        for(auto it = v[A].begin(); it != v[A].end(); it++)
            if(v[B].find(*it) != v[B].end()) coun++;
        double ans = (coun * 100.0)/(v[A].size() + v[B].size() - coun);
        printf("%.1f%%\n", ans);
    }
    system("pause");
    return 0;
}

 

posted @ 2020-01-29 20:47  SteveYu  阅读(146)  评论(0编辑  收藏  举报