zoukankan      html  css  js  c++  java
  • PAT 甲级 1063 Set Similarity (25 分) (新学,set的使用,printf 输出%,要%%)

    1063 Set Similarity (25 分)
     

    Given two sets of integers, the similarity of the sets is defined to be /, where N​c​​ is the number of distinct common numbers shared by the two sets, and N​t​​ 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 Klines 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%
    
    作者: CHEN, Yue
    单位: 浙江大学
    时间限制: 500 ms
    内存限制: 64 MB

    题意:

    本题定义集合相似度Nc/Nt*100%,其中Nc是两个集合中共有的不相等元素个数,Nt是两个集合中不相等元素的个数。你的任务是计算给定的集合的相似度。

    Nc是两个集合的交集元素数量。
    Nt是两个集合的并集元素数量。

    题解:

    本来用数组,明显内存超限,速学了set,很方便啊!!!一下子过了。

    printf 输出%,要%%

    AC代码:

    #include<iostream>
    #include<set>
    #include<algorithm>
    #include<string>
    #include<cstring>
    using namespace std;
    set<int>s[55];
    int n,m,k;
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>m;
            for(int j=1;j<=m;j++){
                int x;
                cin>>x;
                s[i].insert(x);
            }
        }
        cin>>k;
        for(int i=1;i<=k;i++){
            int a,b;
            cin>>a>>b;
            set<int>::iterator it;
            int count=0;
            for(it=s[a].begin();it!=s[a].end();it++){
                if(s[b].find(*it)!=s[b].end()) count++;
            }    
            printf("%.1f%%
    ",count*1.0/(s[a].size()+s[b].size()-count)*100);
        }
        return 0;
    }
  • 相关阅读:
    后缀表达式
    Linux中的硬链接和软链接
    C++中const总结
    atexit()函数
    Linux中的0号进程和1号进程
    什么是可重入函数和不可重入函数
    在线(Online)算法
    PHP验证IP地址输入的准确性:数组数值验证
    PHP网页计时工具——SESSION问题
    软件版本号命名规则
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13270628.html
Copyright © 2011-2022 走看看