zoukankan      html  css  js  c++  java
  • L2-005. 集合相似度(set使用)

    L2-005. 集合相似度

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    给定两个整数集合,它们的相似度定义为:Nc/Nt*100%。其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似度。

    输入格式:

    输入第一行给出一个正整数N(<=50),是集合的个数。随后N行,每行对应一个集合。每个集合首先给出一个正整数M(<=104),是集合中元素的个数;然后跟M个[0, 109]区间内的整数。

    之后一行给出一个正整数K(<=2000),随后K行,每行对应一对需要计算相似度的集合的编号(集合从1到N编号)。数字间以空格分隔。

    输出格式:

    对每一对需要计算的集合,在一行中输出它们的相似度,为保留小数点后2位的百分比数字。

    输入样例:
    3
    3 99 87 101
    4 87 101 5 87
    7 99 101 18 5 135 18 99
    2
    1 2
    1 3
    
    输出样例:
    50.00%
    33.33%
    

    提交代码

    #include <cstdio>  
    #include <algorithm>  
    #include <iostream>  
    #include <set>  
    #include<cstdio>
    using namespace std;  
      
    int main()  
    {  
        int n, m, k, a, l, r;  
        set<int> s[50];  
        scanf("%d", &n) ;  
        for(int i=0; i<n; i++)  
        {  
            scanf("%d", &m);  
            for(int j=0; j<m; j++)  
            {  
                cin >> a;  
                s[i].insert(a);  
            }  
        }  
        set<int>::iterator it;  
        cin >> k;  
        int co;  
        while(k--)  
        {  
            cin >> l >> r;  
            l--;  
            r--;  
            co = 0;  
            for(it=s[l].begin(); it!=s[l].end(); it++ )  
            {  
                if(s[r].count((*it)))  
                    co++;  
            }  
            /*if(s[r].count(*(s[l].end()))) //按理要写,但写了说我越界 
                co++;  */
            printf("%.2lf%%
    ", (double)co/(double)(s[l].size() + s[r].size() - co)*100);  
        }  
      
        return 0;  
    }  

    其他要求

    #include <bits/stdc++.h>  
      
    using namespace std;  
    const int MAXN=1e5+7;  
    int n,m,k;  
    int l[50];  
    int num[50][10000];  
    int ans[10000];  
    int main()  
    {  
        scanf("%d",&n);  
        for(int i=0;i<n;++i)  
        {  
            scanf("%d",&l[i]);  
            for(int j=0;j<l[i];++j)scanf("%d",&num[i][j]);  
            sort(num[i],num[i]+l[i]);  
            l[i]=unique(num[i],num[i]+l[i])-num[i];  
        }  
        int u,v;  
        scanf("%d",&m);  
        while(m--)  
        {  
            scanf("%d%d",&u,&v);  
            u--;  
            v--;  
            int cnt=0;  
            for(int i=0;i<l[u];++i)ans[cnt++]=num[u][i];  
            for(int i=0;i<l[v];++i)ans[cnt++]=num[v][i];  
            sort(ans,ans+cnt);  
            int cnt1=unique(ans,ans+cnt)-ans;  
            printf("%.2f%%
    ",(cnt-cnt1)*100.0/cnt1);  
        }  
        return 0;  
    }  
    View Code
  • 相关阅读:
    存储过程中调用webservice
    设计模式学习笔记——桥接模式(Bridge Patten)
    设计模式学习笔记——修饰模式(Decorator Pattern)
    设计模式学习笔记——单件模式(Singleton Pattern)
    设计模式学习笔记——建造者模式(Builder Pattern)
    设计模式学习笔记——工厂方法(Factory Method)
    设计模式学习笔记——简单工厂(Simple Factory)
    设计模式学习笔记——适配器模式(Adapter Patten)
    设计模式学习笔记——抽象工厂(Abstract Factory)
    存储过程使用shell脚本执行sql文件
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8646472.html
Copyright © 2011-2022 走看看