L2-005 集合相似度 (25 分)(set的应用,学到了学到了)

题目描述

在这里插入图片描述
在这里插入图片描述

题解

大概题意:统计两个数组里同时出现的数的个数,和全部不相同数字的个数。
set可以去重和排序,开一个set数组进行操作即可

代码

#include<bits/stdc++.h>
using namespace std;

int a[55][10086];
set<int> va[55];
set<int>::iterator it;
void solve(int x,int y){
    
    
	int mx=a[x][0],my=a[y][0];
	int fz=0;
	for(it=va[x].begin();it!=va[x].end();it++){
    
    
		if(va[y].find(*it)!=va[y].end()) fz++;
	}
	double ans=(double)fz/(va[x].size()+va[y].size()-fz)*100;
	printf("%.2lf",ans);
	printf("%\n");
}
int main(){
    
    
	int n,k,m;
    scanf("%d",&n);
    for(int i=1;i<=n;i++){
    
    
		scanf("%d",&m);
		a[i][0]=m;
		for(int j=1;j<=m;j++) scanf("%d",&a[i][j]),va[i].insert(a[i][j]);
	}
	  
	scanf("%d",&k); 
	while(k--){
    
    
		int x,y;
		scanf("%d%d",&x,&y);
		solve(x,y);
	}
	
	return 0;
}

猜你喜欢

转载自blog.csdn.net/jigsaw_zyx/article/details/123258519