1063. Set Similarity (25)

时间限制
300 ms
内存限制
32000 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, 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 (<=50) which is the total number of sets. Then N lines follow, each gives a set with a positive M (<=104) and followed by M integers in the range
[0, 109]. After the input of sets, a positive integer K (<=2000) 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%
解题思路:
输入数组后,根据输入的数组序号对数组进行排序,然后去重,再进行类似于merge操作的遍历,获得两个数组中不同的数的个数。

#include <iostream>
#include"stdio.h"
#include"stdlib.h"
#include"algorithm"
using namespace std; struct store{
    int a[10000];
    int length;
    bool sort_flag;//标记数组是否已经排序,可以避免重复排序
    int cnt;
};
int main()
{
    int N,M,K;
    struct store s[50];
    scanf("%d",&N);
    for(int i=0;i<N;i++){
        scanf("%d",&M);
        s[i].length = M;
        s[i].cnt=M;
        s[i].sort_flag = false;
        for(int j=0;j<M;j++){
            scanf("%ld",&s[i].a[j]);
        }
    }
    scanf("%d",&K);     int first,second;
    for(int k=0;k<K;k++){
        scanf("%d%d",&first,&second);
        first--;
        second--;
        if(!s[first].sort_flag){
            sort(s[first].a,s[first].a+s[first].length);//快排
            //去重
            for(int i=s[first].length-1;i>=1;i--){
                if(s[first].a[i]==s[first].a[i-1]){
                    s[first].a[i]=-1;
                    s[first].cnt--;//记下数组中distinct的数的个数
                }
            }
            s[first].sort_flag=true;//已经排序了
        }         if(!s[second].sort_flag){
            sort(s[second].a,s[second].a+s[second].length);
            for(int i=s[second].length-1;i>=1;i--){
                if(s[second].a[i]==s[second].a[i-1]){
                    s[second].a[i]=-1;
                    s[second].cnt--;
                }
            }
            s[second].sort_flag=true;
        }
        int distinct=0;
        int i=0,j=0;
        while(i<s[first].length&&j<s[second].length){
            if(s[first].a[i]!=-1&&s[second].a[j]!=-1){
                if(s[first].a[i]<s[second].a[j]){
                    distinct++;
                    i++;
                }
                else if(s[first].a[i]>s[second].a[j]){
                    distinct++;
                    j++;
                }
                else{
                    i++;
                    j++;
                }
            }else{
                if(s[first].a[i]==-1&&s[second].a[j]!=-1){
                    i++;
                }else if(s[first].a[i]!=-1&&s[second].a[j]==-1){
                    j++;
                }
                else /*if(s[first].a[i]!=-1&&s[second].a[j]!=-1)*/{//用else if会超时
                    i++;
                    j++;
                }
            }
        }
        while(i<s[first].length){
            if(s[first].a[i]!=-1)
                distinct++;
            i++;
        }
        while(j<s[second].length){
           if(s[second].a[j]!=-1)
                distinct++;
            j++;
        }         long common = (s[first].cnt+s[second].cnt-distinct)/2;
        printf("%.1f%\n",(common*100.0/(common+distinct)));
    }
    return 0;
}


1063. Set Similarity (25)的更多相关文章

  1. 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 ...

  2. 【PAT】1063. Set Similarity (25) 待改进

    Given two sets of integers, the similarity of the sets is defined to be Nc/Nt*100%, where Nc is the ...

  3. 1063 Set Similarity (25分)

    Given two sets of integers, the similarity of the sets is defined to be /, where N​c​​ is the number ...

  4. PAT 1063 Set Similarity (25)

    题意:给你n个集合,k次询问,每次询问求两个集合的(交集)/(并集). 思路:k有2000,集合大小有10000.先将每个集合排序,对每个询问分别设两个指针指向两个集合的头.设a[i]为指针1的值,b ...

  5. PAT (Advanced Level) 1063. Set Similarity (25)

    读入之后先排序. 询问的时候可以o(m)效率得到答案. #include<cstdio> #include<cstring> #include<cmath> #in ...

  6. PAT甲题题解-1063. Set Similarity (25)-set的使用

    题意:两个整数集合,它们的相似度定义为:nc/nt*100%nc为两个集合都有的整数nt为两个集合一共有的整数注意这里的整数都是各不相同的,即重复的不考虑在内.给出n个整数集合,和k个询问,让你输出每 ...

  7. 【PAT甲级】1063 Set Similarity (25 分)

    题意: 输入一个正整数N表示集合的个数(<=50),接着输入N行,每行包括一个数字x代表集合的容量(<=10000),接着输入x个非负整数.输入一个正整数Q(<=2000),接着输入 ...

  8. PAT 1063 Set Similarity[比较]

    1063 Set Similarity (25 分) Given two sets of integers, the similarity of the sets is defined to be N ...

  9. PAT 1063. Set Similarity

    1063. Set Similarity 题目大意 给定 n 个集合, k 个询问, 求任意两个集合的并集和合集. 思路 一道裸的考察 STL 中 set 的题, 我居然还用 hash 错过一遍, 用 ...

随机推荐

  1. 关于RTP负载类型及时间戳介绍

    转自:http://www.360doc.com/content/11/1018/13/1016783_157133781.shtml 首 先,看RTP协议包头的格式: 前12个字节在每一个RTP p ...

  2. Android开发如何去除标题栏title(转)

    去除标题栏title其实非常简单,他有两种方法,一种是在代码中添加,另一种是在AndroidManifest.xml中添加: 1.在代码中实现:在此方法setContentView(R.layout. ...

  3. MySQL模糊查询:LIKE模式和REGEXP模式

    MySQL模糊查询提供了两种模式:LIKE模式和REGEXP模式. LIKE模式 LIKE模式是使用的LIKE 或 NOT LIKE 比较运算符进行模糊查询. SELECT 字段 FROM 表 WHE ...

  4. zTree学习文档和DEOM

    http://tool.oschina.net/apidocs/apidoc?api=ztree3.2%2Fapi%2FAPI_cn.html zTree的API http://www.ztree.m ...

  5. 廖雪峰js教程笔记7 基本类型和包装类型

    在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // ' ...

  6. 点击不同按钮生成不同窗体到某个panel上面,类似Frame用法--不错

    //点击不同按钮生成不同页面加载到某个panel上面.procedure TMainForm.DemoButtonClick(Sender: TObject); var NewDemoClass: T ...

  7. Dockerfile完成Hadoop2.6的伪分布式搭建

    在 <Docker中搭建Hadoop-2.6单机伪分布式集群>中在容器中操作来搭建伪分布式的Hadoop集群,这一节中将主要通过Dokcerfile 来完成这项工作. 1 获取一个简单的D ...

  8. [转载] Spring MVC - 处理器拦截器

    5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.   ...

  9. DOM基础3

    隔行变色 <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF- ...

  10. Intellij IDEA tomcat相关

    可能遇到的问题: tomcat7启动报错  java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter h ...