PAT (Advanced Level) 1063. Set Similarity (25) set的相似度
2015-07-28 13:31
579 查看
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:
Sample Output:
[/code]
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%
判断两个set的相似度。
/*2015.7.28cyq*/ #include <iostream> #include <vector> #include <set> #include <fstream> using namespace std; //ifstream fin("case1.txt"); //#define cin fin double f(const set<int> &a,const set<int> &b){ double n1=a.size(); double n2=b.size(); int count=0; for(auto it=a.begin();it!=a.end();it++){ if(b.find(*it)!=b.end()){//共有元素 count++; } } return count/(n1+n2-count)*100; } int main(){ int N; cin>>N; set<int> level; vector<set<int> > datas; int M,x; while(N--){ cin>>M; while(M--){ cin>>x; level.insert(x); } datas.push_back(level); level.clear(); } int K; cin>>K; int a,b; while(K--){ cin>>a>>b; printf("%.1f%%\n",f(datas[a-1],datas[b-1])); } return 0; }
[/code]
相关文章推荐
- linux driver 简单实例
- Spring 注释 @Autowired 和@Resource 的区别
- 阿里电话面试
- 解析大型.NET ERP系统 20条数据库设计规范
- asterisk manager api 配置 (manager.conf)
- 黑马程序员----0704期java开发前奏
- Linux中fork()函数详解
- service中AIDL的应用
- Deviceiocontrol操作异常时,关于getlasterror的错误代码解析
- Codeforces Round #313 (Div. 2) D. Equivalent Strings(字符串+递归)
- Webform——Repeater多表联合显示
- 四种下拉菜单
- iOS开发使用代码创建一个Label控件
- timer定时任务
- HDU 2896/3065 病毒侵袭(AC自动机)
- git 命令学习总结
- Symmetric Tree
- 写在受洗之前:我为什么成为基督徒
- 线程启动代码
- 部署ntp服务器笔记与时区的介绍与修改