存疑PATA1063(已解决)超时set求交并差集

题目https://pintia.cn/problem-sets/994805342720868352/problems/994805409175420928

C++ set取并集,交集,差集_Jiewang的博客-CSDN博客_c++ set 交集
https://blog.csdn.net/u013095333/article/details/89322501?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161517792216780269824392%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=161517792216780269824392&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allbaidu_landing_v2~default-1-89322501.pc_search_result_cache&utm_term=c%2B%2B+set%E6%B1%82%E4%BA%A4%E9%9B%86
代码:

#include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
int main(){
	int n,cnt,t,k;
	scanf("%d",&n);
	set<int> a[n+1];//n个集合 
	for(int j=1;j<n+1;j++){
		scanf("%d",&cnt);//每个集合的数字个数 
		for(int i=0;i<cnt;i++){
			scanf("%d",&t);
			a[j].insert(t); 
		}
	}
	scanf("%d",&k);//k个待比较 
	while(k--){
		int p,q;
		scanf("%d%d",&p,&q);
		int num=a[p].size() +a[q].size();//去重前的总数 
		set<int> unionn;//合并去重后的集合 
		/*for(set<int>::iterator it=a[p].begin();it!=a[p].end();it++){
			unionn.insert(*it); 
		} //合并 
		for(set<int>::iterator it=a[q].begin();it!=a[q].end();it++){
			unionn.insert(*it); 
		} //合并 */
		set_union(a[p].begin(),a[p].end(),a[q].begin(),a[q].end(),inserter(unionn,unionn.begin()));
		int nt=unionn.size(); //去重后的总数 
		double ntc=(num-nt)/(1.0*nt);
		printf("%.1f%\n",ntc*100);
	}
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值