题目链接:https://www.patest.cn/contests/gplt/L2-005
一开始用map超时了,总是有一组数据超时。当时觉得很纳闷。
后来学到了,其实set也是可以开数组的,map也是。
#include<bits/stdc++.h>
using namespace std;
set<int> s[55];
int N,n;
int main()
{
cin>>N;
for(int k=1;k<=N;k++){
cin>>n;
for(int i=0;i<n;i++){
int x;
cin>>x;
s[k].insert(x);
}
}
int op;
cin>>op;
for(int i=0;i<op;i++){
int x,y,same=0;
cin>>x>>y;
set<int>::iterator pos;
for(pos=s[x].begin();pos!=s[x].end();pos++){
if(s[y].find(*pos)!=s[y].end())
same++;
}
double ans=same*1.0/(s[x].size()+s[y].size()-same);
printf("%.2f%%\n",ans*100);
}
return 0;
}