• PAT L2-005. 集合相似度


    题目链接:PAT L2-005. 集合相似度

    题意:

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

    题解:

    对于给定的n预处理一下所有的情况,然后O(1)查询就行了,也可以直接set暴艹。

     
     1 #include<bits/stdc++.h>
     2 #define F(i,a,b) for(int i=a;i<=b;++i)
     3 using namespace std;
     4 
     5 const int N=55;
     6 
     7 vector<int>Q[N];
     8 vector<int>::iterator it;
     9 int n,sz,x,t,a,b;
    10 
    11 double ans[55][55];
    12 
    13 int main()
    14 {
    15     scanf("%d",&n);
    16     F(i,1,n)
    17     {
    18         scanf("%d",&sz);
    19         F(j,1,sz)scanf("%d",&x),Q[i].push_back(x);
    20         sort(Q[i].begin(),Q[i].end());
    21         Q[i].erase(unique(Q[i].begin(),Q[i].end()),Q[i].end());
    22     }
    23     scanf("%d",&t);
    24     F(i,1,n)ans[i][i]=100;
    25     F(i,1,n)F(j,i+1,n)
    26     {
    27         int a=i,b=j;
    28         int Nc=0,Nt;
    29         if(Q[b].size()<Q[a].size())swap(a,b);
    30         int sz=Q[a].size()-1;
    31         F(k,0,sz)
    32         {
    33             it=lower_bound(Q[b].begin(),Q[b].end(),Q[a][k]);
    34             if(it!=Q[b].end()&&*it==Q[a][k])Nc++;
    35         }
    36         Nt=Q[a].size()+Q[b].size()-Nc;
    37         ans[i][j]=ans[j][i]=100.0*Nc/Nt;
    38     }
    39     F(i,1,t)
    40     {
    41         int a,b;
    42         scanf("%d%d",&a,&b);
    43         printf("%.2f%%
    ",ans[a][b]);
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    sqlserver 跟踪标志
    解决ORA-00338,ORA-00312
    oracle SQL性能分析
    高潜力人士和员工
    pymysqlreplication
    Python3操作Excel(写入)
    CentOS7.4 源码安装MySQL8.0
    MySql 时间操作实例
    python+eclipse+pydev开发环境搭建
    MySQL表结构同步工具 mysql-schema-sync
  • 原文地址:https://www.cnblogs.com/bin-gege/p/6709478.html
Copyright © 2020-2023  润新知