L2-005 集合相似度(STL+暴力)

Posted MangataTS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了L2-005 集合相似度(STL+暴力)相关的知识,希望对你有一定的参考价值。

题目连接

https://pintia.cn/problem-sets/994805046380707840/problems/994805070149828608

思路

这道题其实难点在于理解题意,其中的 N c N_c Nc 其实就是两个集合的交集的元素个数, N t N_t Nt 就是两个集合合并后的元素个数(去重),那么我们利用set 或者 map就能很好的实现这个操作,我们定义 Nset 然后我们查找 lr的重复度的时候直接选取一个集合作为操作集合查找一下两个集合中元素的重复个数就得到了 N c N_c Nc ,然后再用两个集合的元素的个数减去 N c N_c Nc 就得到了 N t N_t Nt

代码

set

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f

const int N = 55;
int n,m;

set<int> mp[N];
double ans[N][N];

double compare(int l,int r) 
	double nc,nt;
	nc = 0;
	nt = double(mp[l].size() + mp[r].size());
	for(auto it : mp[l])
		if(mp[r].find(it) != mp[r].end()) 
			nc += 1.0;
	
	nt -= nc;
	return (nc/nt) * 100.0;


int main()

	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	int k;
	for(int i = 1;i <= n; ++i) 
		cin>>m;
		for(int j = 1;j <= m; ++j)
			cin>>k;
			mp[i].insert(k);
		
	
	cin>>m;
	while(m--)
		int l,r;
		cin>>l>>r;
		cout<<fixed<<setprecision(2)<<compare(l,r)<<"%"<<endl;;
	
	
	return 0;

map

但是不知道为何使用map会wa,后面再填坑吧

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define mod 1000000007
#define endl "\\n"
#define PII pair<int,int>
#define INF 0x3f3f3f3f

const int N = 55;
int n,m;

map<int,bool> mp[N];
double ans[N][N];

double compare(int l,int r) 
	double nc,nt;
	nc = 0;
	nt = double(mp[l].size() + mp[r].size());
	for(auto it : mp[l])
		if(mp[r][it.first] == true) 
			nc += 1.0;
	
	nt -= nc;
	return (nc/nt) * 100.0;


int main()

	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n;
	int k;
	for(int i = 1;i <= n; ++i) 
		cin>>m;
		mp[i].clear();
		for(int j = 1;j <= m; ++j)
			cin>>k;
			mp[i][k] = true;
		
	
	cin>>m;
	while(m--)
		int l,r;
		cin>>l>>r;
		cout<<fixed<<setprecision(2)<<compare(l,r)<<"%"<<endl;;
	
	
	return 0;

以上是关于L2-005 集合相似度(STL+暴力)的主要内容,如果未能解决你的问题,请参考以下文章

天梯杯 L2-005. 集合相似度

团体天梯练习 L2-005 集合相似度

L2-005. 集合相似度

l2-005

集合相似度-easy-stl-set

使用MinHash算法计算两个集合的相似度