1063 Set Similarity (25 分)

考查set的模板题
要注意的地方是查询两个集合中是否有相同元素时,可以只用一次循环,同时利用find函数来实现。如果使用map来映射会超时。
注意:
1.set也有数组形式
2.set遍历时只能迭代
3.迭代取值用*it

#include<cstdio>
#include<set>
#include<iostream>
#include<map>
using namespace std;
const int maxn=55;
int main(){
	set<int> st[maxn];
	int n,m,num;
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&m);
		for(int j=0;j<m;j++){
			scanf("%d",&num);
			st[i].insert(num);
		}
	}
	int k,u,v;
	scanf("%d",&k);
	for(int i=0;i<k;i++){
		scanf("%d%d",&u,&v);
		set<int>::iterator it;
		int cnt=0,t = st[v].size();
		for(it=st[u].begin();it!=st[u].end();it++){ //这里容易在it 前面写int
			if(st[v].find(*it) != st[v].end()) cnt++;  //这里容易错
			else t++;
		}
		printf("%.1f%%\n",cnt*100.0/t);
	}
	return 0;
}
全部评论

相关推荐

05-30 12:03
山西大学 C++
offer来了我跪着...:不是骗子,等到测评那一步就知道为啥这么高工资了
点赞 评论 收藏
分享
下北澤大天使:你是我见过最美的牛客女孩😍
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务