pat1063

来源:互联网 发布:网络课程登录入口 编辑:程序博客网 时间:2024/05/21 10:54

这题暴力的话可能有少数几个点是过不了的,考虑到2000次查询,那么而且集合内的数的个数是10000个,基本只能考虑o(n)的比较了,此时最有可能的就是把2个集合排一下序(放到容器里即可),然后2个指针分别从前往后一步步比较,代码如下:

 

#include<stdio.h>#include<iostream>#include<set>#include<algorithm>using namespace std;set<int>::iterator it1,it2;set<int>cl[51];int main(){int n;while(scanf("%d",&n)!=EOF){int i,j;for(i=1;i<=n;i++){int x,gg;scanf("%d",&gg);for(j=1;j<=gg;j++){scanf("%d",&x);cl[i].insert(x);}}int m;scanf("%d",&m);while(m--){int a,b;scanf("%d%d",&a,&b);int ans=0;for(it1=cl[a].begin(),it2=cl[b].begin();;){if(*it1==*it2){ans++;it1++;it2++;}else if(*it1>*it2)it2++;else it1++;if(it1==cl[a].end()||it2==cl[b].end())break;}printf("%.1f%%\n",100.0*ans/(cl[a].size()+cl[b].size()-ans));}}}


原创粉丝点击